2013-09-23 104 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.DataControlLinkBut​​ton”键入'System.Web.UI.WebControls.TextBox'。

我在窗体中有一个必需的字段验证程序,但是当我在网格视图中启用验证更新不起作用时。

+0

你能显示gridview吗?它有什么控制? – Zeeshan

+0

你的'textbox'位置不是你在'FindControl'代码中描述的位置,请参阅Cell编号从零开始。检查更新的答案。 –

+0

我真的很抱歉,看到你的'Cell'包含三个控制两个'label'和一个'textbox'并计算单元号,它的控制从零开始,所以我认为你的控件的数量是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

试着将你的gridview包装在asp:UpdatePanel中,并将更新模式设置为条件。

好运