0

我有一个 asp:linkbutton。当它被按下时,我想根据我的 GridView 中的哪些复选框被选中来获取 DetailID 的列表。我有一个 lblTesting 来查看我正在生成的 DetailID 列表。我的目标是获取传递给编辑页面的 DetailID 列表。

我查看了 Stack Overflow 上的几个示例,但除了选中复选框外,我无法获得任何值。

这是我页面顶部的链接:

<span style="float:right;"><asp:Linkbutton ID="getURLLink" runat="server" Text="Edit Die Detail" OnClick="GetLink"></asp:Linkbutton></span>
<asp:Label runat="server" ID="lblTesting"></asp:Label>

这是我的网格视图:

 <asp:GridView ID="DieListDetailGridView" runat="server" AutoGenerateColumns="false" OnRowDataBound="DieListDetailGridView_RowDataBound" DataKeyNames="DieID" HeaderStyle-HorizontalAlign="Center" HorizontalAlign="Center" ForeColor="#333333" GridLines="Both">
        <RowStyle BackColor="#F5F5DC" />
        <AlternatingRowStyle BackColor = "White" ForeColor="#284775" />
        <Columns>
            <asp:TemplateField HeaderText="Edit" HeaderStyle-HorizontalAlign="Center">
                <ItemTemplate>
                    <asp:CheckBox ID="chkBox" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="DieNum" HeaderText="Die Number"  />
            <asp:BoundField DataField="DieID" HeaderText="Die ID" Visible="false" />
            <asp:BoundField DataField="DetailID" HeaderText="Detail ID" Visible="false" />
            <asp:HyperLinkField DataTextField="DetailNum" HeaderText="Detail Number" DataNavigateUrlFields="DetailID" DataNavigateUrlFormatString="~/Tooling/DieDetail.aspx?DetailID={0}" />
            <asp:BoundField DataField="Description" HeaderText="Description" />
            <asp:BoundField DataField="MaterialType" HeaderText="Material Type" />
            <asp:BoundField DataField="Hardness" HeaderText="Hardness" />
            <asp:BoundField DataField="MinSpares" HeaderText="Min Spares" />
            <asp:BoundField DataField="MaxSpares" HeaderText="Max Spares" />
            <asp:BoundField DataField="CurrentSpares" HeaderText="Current Spares" />
            <asp:BoundField DataField="DetailNotes" HeaderText="Detail Notes" />
        </Columns>
    </asp:GridView>

还有我的 GetLink 函数:

 protected void GetLink(object sender, EventArgs e) 
        {

            // start off empty
            string DetailIDList = "";
            
            foreach (GridViewRow row in DieListDetailGridView.Rows) {

                if (row.RowType == DataControlRowType.DataRow)
                {
                    CheckBox chkBox = (row.Cells[0].FindControl("chkBox") as CheckBox);

                    string DetailID = row.Cells[3].Text;

                    if (chkBox.Checked)
                    {
                       DetailIDList = DetailIDList + DetailID + ",";
                    }
                }
            }

            // Remove the last , from the list
            DetailIDList = DetailIDList.Remove(DetailIDList.Length - 1, 1);
            // comma delimeted list of checked Detail ID's
            lblTesting.Text = DetailIDList;

            //Response.Redirect("~/Tooling/DieDetail.aspx?DetailIDList=");
        }

我不知道为什么我的 DetailID 是空的。

我试过做 row.Cells[0].FindControl("DetailID") 但这也没有用。

我期望从 DetailID 得到的是整数,如“28925”、“16423”等。

我被要求不在页面上显示该列,这就是可见 = false 的原因。我仍然需要引用 ID 以将其传递到编辑页面。我需要对多个详细信息 ID 进行相同的编辑。

我究竟做错了什么?

4

1 回答 1

0

即使数据字段设置为不可见,也可以在另一个 StackOverflow 问题上找到 ID 列表的答案: ASP.NET: GridView value set to null when column is not visible

答案是从 GridView 中删除“Visible=false”,并在创建的每一行上(在该列为该行添加数据之后)使其不可见。

这段代码解决了我的问题:

 protected void DieListDetailGridView_RowCreated(object sender, GridViewRowEventArgs e)
        {
            e.Row.Cells[2].Visible = false;
            e.Row.Cells[3].Visible = false;
        }
于 2021-04-06T19:29:52.100 回答