如何从已选中的复选框所在的Gridview中获取Id?

5
我有一个GridView和一个按钮,如下所示。然后,我将GridView绑定到来自我的数据库的数据。GridView有两个HiddenField,用于Id和ClassIndex。 当我选择复选框并点击按钮时,我想获取相应的Id和FileName。
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
         <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:CheckBox ID="check" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:HiddenField ID="hdfId" runat ="server" Value='<%#Eval("Id") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:HiddenField ID="hdfClssIndex" runat ="server" Value='<%#Eval("ClassIndex") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label ID="lblFileName" runat ="server" Text='<%#Eval("FileName") %>' />
                </ItemTemplate>
            </asp:TemplateField>
         </Columns>
    </asp:GridView>

和按钮类似
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" 
        Text="Send Request" />
protected void Button1_Click(object sender, EventArgs e)
{
    foreach (GridViewRow row in GridView1.Rows)
    {
       var check = row.FindControl("check") as CheckBox;
       if (check.Checked)
       {
         int Id = Convert.ToInt32(row.Cells[1].Text);
         //some logic follws here
       }
    }
}

但是我遇到了一个错误:

输入字符串的格式不正确。这个错误是什么意思,如何解决?

在此输入图片描述

1个回答

2

你的循环正确。

但是你忘记了一个重要的事情,当你想要访问 CheckBox 时,你在 row 上执行了 FindControl。这意味着你正在尝试在该行中查找某个控件。

那么为什么你要通过 row.Cell[1].Text 访问行内的 HiddenField 控件呢?也尝试找到它。

int Id = Convert.ToInt32(((HiddenField)row.FindControl("hdfId")).Value);


谢谢。现在我明白了 :) 但是我没有足够的声望来点赞它 :( - Ritz
有没有什么想法可以在没有“HiddenField”的情况下访问“ID”,可能是通过向上遍历树并定位行的“ID”单元格,然后从中检索ID? - W.M.
1
@w.m. 你可以设置 DataKeyNames 属性,并且可以通过 DataKeys 来访问其值。请参考以下链接:https://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview.datakeynames(v=vs.110).aspx 和 https://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview.datakeys(v=vs.110).aspx - Bharadwaj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接