2013-09-23 2 views
0

Я обновил строку в Gridview, но она не работает.Обновить строку в Gridview?

Вот мой код:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex]; 

    //Label lbldeleteid = (Label)row.FindControl("Label1"); 
    string bname= GridView1.DataKeys[e.RowIndex].Values["manufacturer"].ToString(); 
    TextBox tbmanu = (TextBox)GridView1.Rows[e.RowIndex].Cells[0].Controls[1]; 
    var myString = tbmanu.ToString(); 

    SqlCommand cmd = new SqlCommand("manu_upd",con); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("@manufacturer", SqlDbType.NVarChar,100); 
    cmd.Parameters["@manufacturer"].Value = myString; 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 

    GridView1.EditIndex = -1; 

    BindData(); 

Я получил следующее сообщение об ошибке:

Невозможно привести объект типа 'System.Web.UI.LiteralControl' для типа «System.Web .UI.WebControls.TextBox.

вот мой вид сетки:

  <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
       CellPadding="4" DataKeyNames="manufacturer" ForeColor="#333333" 
       GridLines="None" Width="400px" BorderStyle="Double" 
       CellSpacing="3" Font-Bold="True" Font-Size="Small" ShowFooter="True" 
       ShowHeaderWhenEmpty="True" onrowdeleting="GridView1_RowDeleting" 
       onrowediting="GridView1_RowEditing"  
       onrowupdating="GridView1_RowUpdating" 
       onrowcancelingedit="GridView1_RowCancelingEdit" 
       AutoGenerateEditButton="True"> 
       <AlternatingRowStyle BackColor="White"/> 
       <Columns> 
        <asp:TemplateField HeaderText="Number" ItemStyle- 
         HorizontalAlign="Center"> 
          <ItemTemplate> 
            <asp:Label ID="lbnaumber" runat="server" Text='<%# 
              Container.DataItemIndex + 1 %>'></asp:Label> 
          </ItemTemplate> 
          <ItemStyle HorizontalAlign="Center"></ItemStyle> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Manufacturer" 
         SortExpression="manufacturer"> 
         <ItemTemplate> 
          <asp:Label ID="Label1" runat="server" Text='<%# 
           Bind("manufacturer") %>'></asp:Label> 
         </ItemTemplate> 
         <EditItemTemplate> 
          <asp:TextBox ID="tbmanu" runat="server" Text='<%# 
           Bind("manufacturer") %>'></asp:TextBox> 
         </EditItemTemplate> 
         <ItemStyle HorizontalAlign="Center" /> 
        </asp:TemplateField> 
        <%--<asp:CommandField ShowEditButton="True" />--%> 
        <asp:CommandField ShowDeleteButton="True" /> 
       </Columns> 
       <EditRowStyle BackColor="#2461BF"/><FooterStyle BackColor="#507CD1" 
        Font-Bold="True" ForeColor="White" /> 
       <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White"/> 
       <PagerStyle BackColor="#2461BF" ForeColor="White" 
         HorizontalAlign="Center" /> 
       <RowStyle BackColor="#EFF3FB" /><SelectedRowStyle BackColor="#D1DDF1" 
        Font-Bold="True" ForeColor="#333333" /> 
       <SortedAscendingCellStyle BackColor="#F5F7FB"/> 

       <SortedAscendingHeaderStyle BackColor="#6D95E1" /> 

       <SortedDescendingCellStyle BackColor="#E9EBEF" /> 


       <SortedDescendingHeaderStyle BackColor="#4870BE" /> 


     </asp:GridView> 

При изменении индекса моего текстового поля от 1 до 3 он показывает мне ниже ошибки:

Указанный аргумент был вне диапазон допустимых значений. Имя параметра: индекс

Когда я изменить индекс 3 на 2 дает мне ниже ошибки:

Невозможно привести объект типа «» System.Web.UI.WebControls.DataControlLinkButton для ввода «System.Web.UI.WebControls.TextBox».

У меня есть один обязательный полевой валидатор в моей форме, но когда я включаю, что обновление проверки в виде сетки не работает.

+0

Вы можете показать изображение сетки? какие средства контроля имеют в нем? – Zeeshan

+0

Хорошо, что ваша позиция 'textbox' - это не то, что вы описали в коде' FindControl', см. Нумерация ячеек начинается с нуля. Проверьте обновленный ответ. –

+0

Мне очень жаль, см. «Ячейка» содержит три элемента управления: «метка» и «текстовое поле» и подсчет числа ячеек, а управление начинается с нуля. Поэтому я думаю, что количество ваших элементов управления будет равно 2, а не 3 или 0 (извините :-)), эта ошибка возникает, когда вы объявили что-то, чего не существует в нашем случае, мы объявили 'Control [3]', а общее количество элементов управления 3, но это 0,1,2, поэтому ваше текстовое поле находится на третьей позиции, которая равно 2. –

ответ

0
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     GridViewRow row = GridView1.Rows[e.RowIndex]; 
     TextBox tbmanu1 = (TextBox)row.FindControl("tbmanu"); 
     //or try 
     //TextBox tbmanu1= (TextBox)row.Cells[0].FindControl("tbmanu"); 
     string myString = Convert.Tostring(tbmanu1.text); 
     cmd.Parameters["@manufacturer"].Value = myString; 
    } 
+0

Большое спасибо за повтор работы. –

0

Попробуйте обернуть сетку в asp: UpdatePanel и установить режим обновления в условное.

Удачи

Смежные вопросы