如何按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;
            }
        }
    }

如何按ID操作项目模板中的项目

当您循环遍历网格中的所有行时,您需要检查行的类型,如下所示:

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