1

いくつかのデータを含むグリッドビューがあり、複数の行を選択できるチェックボックス列を追加したいと考えています。それをクリックして、行の主キーを保存し、行のcssクラスを変更したいと思います。

この記事 (ステップ 2)を使用して、itemtemplate を作成し、そこにチェックボックスを追加し (ID を TransactionSelector として指定)、checkedChange() を追加しました。行の css クラスを変更し、行インデックスを arraylist に追加するだけです。しかし、このリストを表示するイベントでボタンをクリックすると、アイテムがありません。

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" >
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:CheckBox ID="TransactionSelector" runat="server" 
                        oncheckedchanged="TransactionSelector_CheckedChanged" AutoPostBack="True" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="iTransactionsId" HeaderText="iTransactionsId" 
                SortExpression="iTransactionsId" />
            <asp:BoundField DataField="mAmount" HeaderText="mAmount" 
                SortExpression="mAmount" />
            <asp:BoundField DataField="vchTransactionType" HeaderText="vchTransactionType" 
                SortExpression="vchTransactionType" />
            <asp:BoundField DataField="dtDate" HeaderText="dtDate" 
                SortExpression="dtDate" />
            <asp:BoundField DataField="cStatus" HeaderText="cStatus" 
                SortExpression="cStatus" />
            <asp:BoundField DataField="test123" HeaderText="test123" 
                SortExpression="test123" />
        </Columns>
        <RowStyle CssClass="unselectedRow" />
    </asp:GridView>

</asp:Panel>

<asp:Panel ID="InfoPanel" runat="server" CssClass="infoPanel">

    <asp:Button ID="ShowSelected" runat="server" Text="Button" 
        onclick="ShowSelected_Click" />

    <asp:Label ID="InfoLabel" runat="server"></asp:Label>

</asp:Panel>

C シャープコード:

public partial class WebForm1 : System.Web.UI.Page
{
    ArrayList indices = new ArrayList();


protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostBack)
     {
       GridView1.DataSourceID = "SqlDataSource1";
       GridView1.DataBind();
     }
}



protected void TransactionSelector_CheckedChanged(object sender, EventArgs e)
{
   CheckBox cb = (CheckBox)sender;
   GridViewRow row = (GridViewRow)cb.NamingContainer;
   // row.CssClass = (cb.Checked) ? "selectedRow" : "unselectedRow";
   if (cb.Checked)
   {
     row.CssClass = "selectedRow";
     indices.Add(row.RowIndex);
   }
   else
   {
     row.CssClass = "unselectedRow";
     indices.Remove(row.RowIndex);
   }
}

protected void ShowSelected_Click(object sender, EventArgs e)
{
  InfoLabel.Text = "";
  foreach (int i in indices)
  {
   InfoLabel.Text += i.ToString() + "<br>";
  }
}

}
}
4

2 に答える 2

3

を使用して、ポストバックで変数を保持する必要がありますViewStateList<T>また、一般的な実装ではなく、一般的な実装を使用する方が良いArrayList

ViewState["Indices"] = indices;

そしてそれを元に戻すために

indices = ViewState["Indices"] as ArrayList;
于 2013-10-01T14:29:11.523 に答える