0

CheckBox コントロールを含む GridView があります。ユーザーが必要な行をチェックしたら、ボタンをクリックすると、チェックされた行ごとにデータベースを更新する必要があります。

グリッドビューの行を反復処理してチェックボックスの値を確認するコードがありますが、チェックされていても常に false です。無視してチェックボックスへの参照を取得しますが、常にfalseです。ここで何が欠けていますか?

aspx.cs ファイル:

protected void Ignore_Click(object sender, EventArgs e)
{
    foreach (GridViewRow row in grdNotReceived.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            CheckBox ignore = (CheckBox)row.FindControl("chkIgnore");

            if (ignore.Checked)
            {
                // Update Database
            }
        }
    }
}

.aspx ページ:

<asp:GridView ID="grdNotReceived" runat="server"
    Width="600px"
    CssClass="mGrid"
    AlternatingRowStyle-CssClass="alt"
    PagerStyle-CssClass="pgr" AutoGenerateColumns="false">
<AlternatingRowStyle CssClass="alt"/>
<Columns>
    <asp:BoundField DataField="Store" HeaderText="Store" />
    <asp:BoundField DataField="Dept" HeaderText="Dept" />
    <asp:BoundField DataField="Type" HeaderText="Type" />
    <asp:BoundField DataField="RefNumber" HeaderText="RefNumber" />
    <asp:BoundField DataField="Date" HeaderText="Date" />
    <asp:BoundField DataField="Vendor" HeaderText="Vendor" />
    <asp:BoundField DataField="Total" HeaderText="Total" />
    <asp:TemplateField>
        <ItemTemplate>
            <asp:CheckBox ID="chkIgnore" runat="server" Checked="false" />
        </ItemTemplate>
        <EditItemTemplate>
            <asp:CheckBox ID="chkIgnore" runat="server" Checked="false" />
        </EditItemTemplate>
    </asp:TemplateField>
</Columns>
</asp:GridView>

GridView データバインド メソッド:

protected void LoadExceptions()
{
    Database db = new Database();
    SqlCommand sql = new SqlCommand();

    sql.CommandText = "getSobeysNotReceived";

    this.grdNotReceived.DataSource = db.GetSprocDR(sql);
    this.grdNotReceived.DataBind();

    db.Close();
}
4

1 に答える 1

0

データバインディング関数 ( LoadExceptions()) がページ読み込みのどこか (Loadイベントまたはクラス コンストラクターなど) で呼び出されている場合、ユーザーがフォームで行った変更をオーバーライドしています。

ページがポストバックされている場合はデータバインドしないでください。if (!Page.IsPostBack)呼び出す前に追加するLoadExceptions()か、更新LoadExceptions()して確認できます。

protected void LoadExceptions()
{
    if (!Page.IsPostBack)
    {
        Database db = new Database();
        SqlCommand sql = new SqlCommand();

        sql.CommandText = "getSobeysNotReceived";

        this.grdNotReceived.DataSource = db.GetSprocDR(sql);
        this.grdNotReceived.DataBind();

        db.Close();
    }
}
于 2013-05-27T22:42:22.827 に答える