2

私は .NET の初心者で、チェックボックスに問題があります。それらが選択されていても、それらはすべて false を返します。ここに私のaspコードがあります

   <asp:GridView ID="gvGeneros1" runat="server" class="divTable" 
        AutoGenerateColumns="False" DataKeyNames="idgenero" CssClass="table">
        <Columns>
            <asp:BoundField DataField="nome" HeaderText="Gênero" SortExpression="nome" >
            <ControlStyle Width="200px" />
            <ItemStyle Width="200px" />
            </asp:BoundField>
            <asp:TemplateField AccessibleHeaderText="Check">
                <ItemTemplate>
                    <asp:CheckBox ID="checkGenero" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

ここに私のC#コードがあります

DataSet dsDivided;

protected void Page_Load(object sender, EventArgs e)
{
    Music musicbll = new Music();
    DataSet dsGeneros = musicbll.getGenders();

    int size = dsGeneros.Tables[0].Rows.Count;
     dsDivided = null;

        // Divide in two DataTable
        dsDivided = Tools.SplitDataTableInTwo((DataTable)dsGeneros.Tables[0], size / 2);

    gvGeneros1.DataSource = dsDivided.Tables["FirstSet"];
    gvGeneros1.DataBind();

    for (int i = 0; i < gvGeneros1.Rows.Count; i++)
    {
        ((CheckBox)gvGeneros1.Rows[i].Cells[1].Controls[1]).Checked=false;
    }

}


protected void btGravarPrefs_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable("generos");
    dt.Columns.Add("idgenero", typeof(int));
    dt.Columns.Add("active", typeof(bool));

    for (int i = 0; i < gvGeneros1.Rows.Count; i++)
    {
        int idCliente = (int)dsDivided.Tables[0].Rows[i][0];
         bool check = ((CheckBox)gvGeneros1.Rows[i].Cells[1].Controls[1]).Checked; //always false
        dt.Rows.Add(new object[] { idCliente, check});
    }
}

}

もっと何を試せばいいのかわからず、あちこち探してみると、正しいようです。ありがとう

4

1 に答える 1

13

Data binding でラップする必要があると思いますif (!Page.IsPostBack)

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    { 
       //Bind your datasource here
    }
}
于 2012-11-28T14:33:16.820 に答える