1

ユーザーがチェックボックスを選択するグリッドビューの ID 列にアクセスしようとして、頭を悩ませました。

<asp:GridView ID="gvUserFiles" runat="server">
            <Columns>
            <asp:TemplateField HeaderText="Select" ItemStyle-HorizontalAlign="Center" >
                <ItemTemplate>
                    <asp:CheckBox  ID="chkSelect" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            </Columns>
        </asp:GridView>

グリッドビューの列は、chkSelect (チェックボックス)、Id、fileName、CreateDate です。

ユーザーがチェックボックスをオンにしてボタンを押すと、「id」列の値を受け取りたいです。

ボタンのコードは次のとおりです。

foreach (GridViewRow row in gvUserFiles.Rows)
            {
                var test1 = row.Cells[0].FindControl("chkSelect");
                CheckBox cb = (CheckBox)(row.Cells[0].FindControl("chkSelect"));
                //chk = (CheckBox)(rowItem.Cells[0].FindControl("chk1"));  
                if (cb != null && cb.Checked)
                {
                    bool test = true;

                }
            }

cb.checked は常に false を返します。

4

2 に答える 2

3

チェックボックスが常にオフになっていることは、DataBinding の問題である可能性があります。GridViewボタン クリック イベントが呼び出される前に、DataBinding を行っていないことを確認してください。Page_load場合によっては、イベントに DataBinding を貼り付けてから、すべてのに DataBinding を保持することがありますPostBack。ボタンクリック前に呼び出されるため、直接的な影響を与えることができます。が DataBoundの場合GridView、ページから取得したすべての状態が失われます。

で をデータバインドする場合は、次のことを確認GridViewしてPage_loadラップし!IsPostBackます。

if (!IsPostBack)
{
    gvUserFiles.DataSource = data;
    gvUserFiles.DataBind();
}

そうでない場合は、Request.Form値に基づいてチェックされたプロパティを確認してみてください。

protected void button_OnClick(object sender, EventArgs e)
{
    foreach (GridViewRow row in gvUserFiles.Rows)
    {
        CheckBox cb = (CheckBox)row.FindControl("chkSelect");

        if (cb != null)
        {
            bool ckbChecked = Request.Form[cb.UniqueID] == "on";

            if (ckbChecked)
            {
                //do stuff
            }
        }
    }
}

aのChecked値はCheckBox、ブラウザーによって value として送信されます"on"。また、ブラウザでチェックされていない場合、リクエストは何も行われません。

于 2013-03-03T14:33:03.277 に答える
1

このようなデータキーを使用してそれを達成することができます

グリッドビューにDatakeyを追加します

<asp:GridView ID="gvUserFiles" runat="server" DataKeyNames="Id">

このようにサーバー側で取得します

string value = Convert.ToString(this.gvUserFiles.DataKeys[rowIndex]["Id"]);
于 2013-03-03T14:26:52.093 に答える