提问人:Rusty 提问时间:11/15/2023 更新时间:11/15/2023 访问量:32
访问列标题中的复选框控件
Accessing Check box control that is in column header
问:
我在VS2019中创建了一个 aps.net c#的应用程序
我有一个网格视图,它在列标题中有一个复选框。 一旦用户单击要显示的单独按钮,我想验证列标题中名为“chkALL”的复选框,以查看它是否被选中。我似乎无法获得正确的语法来执行此操作。 有什么建议吗?
我的 ASPX 代码在这里: <asp:TemplateField HeaderText=“Chg”> <asp:CheckBox ID=“ChkAll” runat=“server” AutoPostBack=“true” OnCheckedChanged=“ChkAll_CheckedChanged” /> <asp:CheckBox ID=“ChkRow” runat=“server” AutoPostBack=“true” OnCheckedChanged=“ChkRow_CheckedChanged” RowIndex=“<%# Container.DataItemIndex %>” /> </asp:TemplateField>
这是我尝试过的 c# 代码
复选框 chkbox = (CheckBox)tgvCorrelations.Column[13]。查找控件(“chkAll”);
答:
您需要创建一个函数,以便在触发复选框的事件更改时使用
所以这个空白它写道:
private void ChkAll_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i < tgvCorrelations.Rows.Count; i++)
{
CheckBox chk =
(CheckBox)tgvCorrelations.Rows[i].Cells[0].FindControl("chkAll");
if (chk.Checked)
{
}
else
{
//...
}
}
}
获取/使用并享受标题中复选框的值?
可以对 GridView.HeaderRow 使用查找控件。
因此,假设此标记:
<asp:Button ID="cmdLoad" runat="server" Text="Load Data"
CssClass="btn"
OnClick="cmdLoad_Click"
/>
<br />
<br />
<asp:GridView ID="GVHotels" runat="server" AutoGenerateColumns="False"
DataKeyNames="ID" CssClass="table"
Width="45%"
ShowHeaderWhenEmpty="true"
>
<Columns>
<asp:BoundField DataField="FirstName" HeaderText="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="LastName" />
<asp:BoundField DataField="City" HeaderText="City" />
<asp:BoundField DataField="HotelName" HeaderText="HotelName" />
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:TemplateField
ItemStyle-HorizontalAlign="Center"
HeaderStyle-HorizontalAlign="Center"
>
<ItemTemplate>
<asp:CheckBox ID="chkSel" runat="server"
OnCheckedChanged="chkSel_CheckedChanged"
AutoPostBack="true"
/>
</ItemTemplate>
<HeaderTemplate>
<div style="text-align:center">
Select All<br />
<asp:CheckBox ID="chkSelAll" runat="server"
OnCheckedChanged="chkSelAll_CheckedChanged"
AutoPostBack="true"
/>
</div>
</HeaderTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
因此,当我们点击按钮加载 GridView 时,我们将获得标题中复选框的值,并将所有行设置为选中(或未选中)。
因此,加载网格的代码如下所示:
protected void Page_Load(object sender, EventArgs e)
{
}
protected void cmdLoad_Click(object sender, EventArgs e)
{
LoadGrid();
}
void LoadGrid()
{
CheckBox chkSelAll = new CheckBox();
chkSelAll.Checked = false;
bool HoldCheck = false;
if (GVHotels.Rows.Count > 0)
{
chkSelAll = (CheckBox)GVHotels.HeaderRow.FindControl("chkSelAll");
HoldCheck = chkSelAll.Checked;
}
string strSQL = @"SELECT * FROM tblHotelsA
ORDER BY HotelName";
GVHotels.DataSource = General.MyRst(strSQL);
GVHotels.DataBind();
chkSelAll = (CheckBox)GVHotels.HeaderRow.FindControl("chkSelAll");
chkSelAll.Checked = HoldCheck;
CheckAll(chkSelAll.Checked);
}
protected void chkSel_CheckedChanged(object sender, EventArgs e)
{
}
protected void chkSelAll_CheckedChanged(object sender, EventArgs e)
{
CheckBox chkSelAll = (CheckBox)sender;
CheckAll(chkSelAll.Checked);
}
void CheckAll(bool chk)
{
// check/un check all check box for each row
foreach (GridViewRow gRow in GVHotels.Rows)
{
CheckBox chkSel = (CheckBox)gRow.FindControl("chkSel");
chkSel.Checked = chk;
}
}
请注意,非常接近,当我们重新绑定 GridView 时,复选框的设置将丢失。因此,如果我们要重新绑定 GridView,但也要遵守复选框,那么我们获取/抓取/保存复选框,重新加载网格,然后将复选框重新设置回标题中。(当我们重新绑定时,该值为 LOST,因此上面的代码考虑到了这一点)。
请注意,在网格加载后,可能仍希望通过单击标题来检查全部(或取消选中全部)。该代码稍微容易一些,因为我们可以使用“sender”来获取有问题的复选框。
因此,该代码为:
protected void chkSelAll_CheckedChanged(object sender, EventArgs e)
{
CheckBox chkSelAll = (CheckBox)sender;
CheckAll(chkSelAll.Checked);
}
但是,上面的代码存根将并且可以使用 .GridView 标头对象的 FindControl,但使用 sender 的代码较少。
因此,结果是这样的:
评论