C# 从Gridview获取值以进行更新

C# 从Gridview获取值以进行更新,c#,asp.net,.net,gridview,webforms,C#,Asp.net,.net,Gridview,Webforms,我有一个带有AutoGenerateEditButton=“true”的gridview: 这是我的objectDataSource: <asp:ObjectDataSource ID="myOds" runat="server" DeleteMethod="myDeleteMethod" SelectMethod="mySelectMethod" TypeName="TheirLocation.sqlDataLayer" UpdateMethod="myUpdat

我有一个带有AutoGenerateEditButton=“true”的gridview:


这是我的objectDataSource:

<asp:ObjectDataSource ID="myOds" runat="server" 
    DeleteMethod="myDeleteMethod" SelectMethod="mySelectMethod" 
    TypeName="TheirLocation.sqlDataLayer" UpdateMethod="myUpdateMethod">
    <DeleteParameters>
        <asp:Parameter Name="id" Type="Int32" />
    </DeleteParameters>
    <SelectParameters>
        <asp:Parameter Name="fromDate" Type="DateTime"/>
        <asp:Parameter Name="toDate" Type="DateTime"/>
    </SelectParameters>
    <UpdateParameters>
        <asp:Parameter Name="id" Type="Int32" />
        <asp:Parameter Name="volume" Type="Int32" />
    </UpdateParameters>
</asp:ObjectDataSource>

这是我的更新事件处理程序:

protected void gvVolumeList_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    GridViewRow row = gvVolumeList.Rows[e.RowIndex];
    String debugString = ((TextBox)(row.Cells[1].Controls[0])).Text;
    Response.Write("<script>alert('" + debugString + "');</script>");
}
protectedvoid gvVolumeList\u行更新(对象发送方,GridViewUpdateEventArgs e)
{
GridViewRow行=gvVolumeList.Rows[e.RowIndex];
字符串调试字符串=((文本框)(行。单元格[1]。控件[0])。文本;
Write(“警报(“+debugString+”);”;
}
我只是想从我的文本框中获取值,以显示在警报中,但我无法修复它。我尝试过各种各样的东西,疯狂地在谷歌上搜索,但我无法得到它的价值

编辑


我想问题是我从单元格中获取文本,而不是单元格中的文本框。仍然不知道该做什么,尽管这是如何在行更新中获取控件值

 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
 {
    GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex];
    //int id = Int32.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());
    TextBox tname = (TextBox)row.FindControl("nam");
   //to get value of first cell
    string str = row.Cells[0].Text.ToString();
 }

如果您试图从gridview获取Id!! 如果您已将绑定字段可见性声明为false,则不会呈现绑定字段,因此您无法通过使用获取其值

  String debugString = ((TextBox)(row.Cells[1].Controls[0])).Text;
单元索引从0开始,而不是从1开始(如果您试图获取Id)。 最好使用gridview的row命令,或者使您的Id属性
visible=“true”

--------------------------或---------------------------- 使用模板字段

 <asp:TemplateField>
            <ItemTemplate>
                <asp:HiddenField ID="HiddenField1" runat="server" 
                    Value='<%# Eval("Id") %>' />
                 ....
            </ItemTemplate>

从那里你可以得到文本框名为
nam
,这根本不起作用。获取了一个空的alertbox(因此未找到任何值),该alertbox是虚拟名称,您可以根据控件名称更改名称。但在网格中没有任何文本框控件。因此,您可以使用row.Cells[0].text获取任何单元格的值。仍然为空。只是一个空字符串而不是
绑定字段
我更喜欢
模板字段
,这里是一个使用模板字段的示例我不是usnig Id,我使用的是项目。但是谢谢你的回答,我会看看我是否可以用一个模板来做这个。。。TextBox chk=(TextBox)row.FindControl(“项”);字符串值=chk.Text;希望它能按你的方式工作你的方式也是正确的你必须改变单元格号,你使用的是row.cell[1]而不是row.cell[2]根据你的代码,上面的单元格位置是第三,这意味着第二个单元格(单元格编号从零开始)。希望它能工作。在
string value=chk.Text上写着“对象引用未设置为对象的实例”行,我试着换到不同的单元格。我可以很好地获取日期值,但不能从文本框中获取输入值,我很乐意!谢谢你!
 <asp:TemplateField>
            <ItemTemplate>
                <asp:HiddenField ID="HiddenField1" runat="server" 
                    Value='<%# Eval("Id") %>' />
                 ....
            </ItemTemplate>
if (row.RowType == DataControlRowType.DataRow)
      {
       HiddenField Id = (HiddenField)row.Cells[0].FindControl("HiddenField1");

       }
protected void GridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
  {    
    GridViewRow row = TaskGridView.Rows[e.RowIndex];
    String str = ((TextBox)(row.Cells[2].Controls[0])).Text;
  }