2

今、ItemTemplates の MSDN を見ましたが、ID でアクセスする方法がわかりませんでした。

ここにリンクがありますhttp://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.templatefield.itemtemplate.aspx

コードビハインドまたはサーバー スクリプトで他のコントロールにアクセスするのと同じように簡単だと思っていましたが、うまくいきません。ID で参照しようとすると、「現在のコンテキストには存在しません」というエラーが表示され続けます。

私がやろうとしているのは、ヘッダー checbox の 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;
            }

        }
    }
4

2 に答える 2

1

クライアント側でこれを行う場合 (通常、ユーザーはチェックオール ボックスがすべてのボックスをオンにすることを期待します)、ページ ライフサイクルのレンダリング時にコントロールから ClientID が必要になります。

4.0 より前のバージョンでは、レンダリングされたページを「ごまかす」ことができました (ブラウザからソースを表示)。ただし、.aspx ページを編集するたびに変更される可能性があるため、これは脆弱な方法です。

最新のフレームワーク (4.0 以降) を使用している場合はClientIDMode、静的に設定できます。その後、ID 属性の値を ClientID として使用できるようになります。

http://msdn.microsoft.com/en-us/library/1d04y8ss%28v=vs.100%29.aspx

于 2013-08-14T17:14:12.863 に答える