为什么我的复选框没有注册为已选中?

时间:2012-06-26 14:00:35

标签: c# asp.net gridview checkbox

我一直在使用ASP.net / C#中的GridView中的CheckBox列。完成后,此页面应显示我办公室的当前未结头寸。人们应该能够检查他们想要申请的多个职位,然后继续到下一个屏幕(实际申请开始的地方)。

这是我点击“立即申请”按钮时运行的例程。在我尝试了我的老板和人们在这里提出的十几种其他组合后,我在这里找到了这个代码。当我运行它时,isChecked = false,因此它不会在if语句中运行任何内容。我错过了一些明显的东西吗?

for (int i = GridView1.Rows.Count - 1; i > -1; i--)
{
    GridViewRow row = GridView1.Rows[i];
    bool isChecked = ((CheckBox)row.FindControl("cbx_apply")).Checked;

    if (isChecked)
    {
        try
        {
            Response.Write("Hello world");
            PositionsAppliedFor.Add(Convert.ToInt32((GridView1.Rows[i].Cells[1].Text)));
            Session["SelectedPositionIDList"] = PositionsAppliedFor;
        }
        catch (Exception error)
        {
            Response.Write(error.Message);
        }
    }
}
编辑:另外,我意识到我在if语句中所做的事情并不重要。我只是想让它做/某事/。 ASP.NET:

<asp:GridView ID="GridView1" runat="server" 
              onselectedindexchanged="UpdateSelectedPostions">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="cbx_apply" runat="server" 
                              OnCheckedChanged="UpdateSelectedPostions"
                              AutoPostBack="false"/>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

简单,可能遗漏了很多。我是/非常/新的ASP.NET。

这是我加载网格数据并将其绑定的地方:

string sqlstatement = "SELECT * FROM dbo.POSITION WHERE PositionStartDate < GETDATE() AND PositionEndDate > GETDATE()";
command = new SqlCommand(sqlstatement, connection);
ds = new DataSet();
adapter = new SqlDataAdapter(command);
builder = new SqlCommandBuilder(adapter);
adapter.Fill(ds);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
connection.Close();

希望这已经足够了,因为它确实是我的全部。我还没有在页面上添加任何其他内容 - 只是试图让这些愚蠢的复选框与我达成一致。

2 个答案:

答案 0 :(得分:8)

确保您的绑定代码位于以下块中:

if (!Page.IsPostBack)
{

}

否则,您将重新创建每个回发的复选框,因此会丢失它们被检查的事实。

答案 1 :(得分:5)

如果您的代码

string sqlstatement = "SELECT * FROM dbo.POSITION WHERE PositionStartDate < GETDATE() AND PositionEndDate > GETDATE()";
command = new SqlCommand(sqlstatement, connection);
ds = new DataSet();
adapter = new SqlDataAdapter(command);
builder = new SqlCommandBuilder(adapter);
adapter.Fill(ds);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
connection.Close();

在page_load方法中,每次回发时都会调用此方法,您应该阅读this,这样可以让您更好地了解这一点。

每次使用此

回发包装代码时,为避免它运行此代码
if(!Page.IsPostBack)
{

}

另外在旁注中,您在CheckChanged和SelectedIndexChanged上调用UpdateSelectedPostions是否意味着这样做?