提问人:Mat Landers 提问时间:4/7/2021 更新时间:4/7/2021 访问量:168
C# GridViewRow FindControl 获取/传递值
C# GridViewRow FindControl get/pass values
问:
我有一个asp:link按钮。按下它时,我想根据选中 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>
这是我的 GridView:
<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 是空的。
我试过划船。细胞[0]。FindControl(“DetailID”),但这也没有用。
我期望从 DetailID 获得的是像“28925”、“16423”等这样的整数。
我被要求不要在页面上显示该列,这就是 visible = false 的原因。我仍然需要引用 ID 才能将其传递到编辑页面。我需要对多个详细信息 ID 进行相同的编辑。
我做错了什么?
答:
0赞
Mat Landers
4/7/2021
#1
即使数据字段设置为不可见,也要找到 ID 列表的答案,可以在另一个 StackOverflow 问题中找到: ASP.NET:当列不可见时,GridView 值设置为 null
答案是从 GridView 中删除“Visible=false”,并在创建的每一行(在列为该行添加数据后)使其不可见。
这段代码解决了我的问题:
protected void DieListDetailGridView_RowCreated(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[2].Visible = false;
e.Row.Cells[3].Visible = false;
}
评论