如何按ID操作项目模板中的项目
本文关键字:项目 ID 操作 何按 | 更新日期: 2023-09-27 18:27:45
现在我查看了ItemTemplates上的MSDN,但我不知道如何通过ID访问它们。
这是一个链接http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.templatefield.itemtemplate.aspx
我认为这将是直接的,就像访问代码绑定或服务器脚本中的任何其他控件一样,但它不起作用。当我试图通过ID引用它时,我不断收到"当前上下文中不存在"的错误。
我要做的是访问一个表头复选框的checked属性,并使用它来选择或取消选择ItemTemplate中的所有复选框。我还需要以后是否选择它们用于我的代码中的其他用途。
这是我在项目中使用的网格视图的代码。
<asp:GridView ID="ApplicationsGridView" runat="server"
AutoGenerateColumns="True"
visible="true"
Font-Size="Smaller"
CellPadding="5"
Width="1200px"
BorderStyle="Solid"
BorderColor="Black"
OnDataBinding="ApplicationsGridView_DataBinding">
<%-- Add the checkboxes declaratively --%>
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox runat="server" ID="checkall" Checked="true" OnCheckedChanged="checkall_CheckedChanged" />
<script runat="server">
protected void checkall_CheckedChanged(object sender, EventArgs e)
{
if(checkall.checked)
{
foreach (GridViewRow row in ApplicationsGridView.Rows { }
}
}
</script>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox runat="server" ID="checkboxes" Checked="true" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<AlternatingRowStyle BackColor="#d2d2f2" />
<HeaderStyle Font-Bold="true" BackColor="#052a9f" ForeColor="#eeeeff" Font-Size="Medium"/>
</asp:GridView>
最初,我曾尝试访问代码后台的ID。但是,即使尝试使用服务器脚本,它仍然找不到它。如果不是通过ID,我如何访问复选框?
编辑:此操作=)
protected void checkall_CheckedChanged(object sender, EventArgs e)
{
//get whether its checked or not.
CheckBox theCheckBox = sender as CheckBox;
//check them all if checked. Uncheck them all when unchecked.
if (theCheckBox.Checked)
{
foreach (GridViewRow row in ApplicationsGridView.Rows)
{
CheckBox cb = row.FindControl("checkboxes") as CheckBox;
cb.Checked = true;
}
}
else if (!(theCheckBox.Checked))
{
foreach (GridViewRow row in ApplicationsGridView.Rows)
{
CheckBox cb = row.FindControl("checkboxes") as CheckBox;
cb.Checked = false;
}
}
}
当您循环遍历网格中的所有行时,您需要检查行的类型,如下所示:
foreach (GridViewRow row in ApplicationsGridView.Rows)
{
if(row.RowType == DataControlRowType.Header)
{
// Search for checkbox by ID here
CheckBox theCheckBox = row.FindControl("checkall") as CheckBox;
// Do whatever you need to do with checkbox here
}
}
更新:
您不需要搜索实际控制,因为复选框启动了事件,所以您可以这样做:
protected void checkall_CheckedChanged(object sender, EventArgs e)
{
// Cast the sender of the event to a check box, because the check box created this event
CheckBox theCheckBox = sender as CheckBox;
if (theCheckBox.Checked)
{
foreach (GridViewRow row in ApplicationsGridView.Rows)
{
// Here is where you want to search for the existing check boxes, not create new ones
CheckBox cb = row.FindControl("checkboxes") as CheckBox;
cb.Checked = true;
}
}
}
如果您想在客户端执行此操作(通常情况下,用户希望使用checkall框来选中所有框),则在页面生命周期中的呈现时需要来自控件的ClientID。
在4.0之前的版本中,你可以"作弊"并查看渲染的页面(从浏览器查看源代码)。然而,这是一种脆弱的方法,因为它可能会随着.aspx页面的每次编辑而更改。
如果您有最新的框架(4.0或更高版本),则可以将ClientIDMode
设置为静态。然后,您将能够使用ID属性中的值作为ClientID。
http://msdn.microsoft.com/en-us/library/1d04y8ss%28v=vs.100%29.aspx