【发布时间】:2011-05-04 23:47:36
【问题描述】:
我正在使用 asp.net 和 c# 创建一个 Web 应用程序。我正在使用 gridview 来显示数据库中的员工列表。我添加了一个复选框,以便用户可以选择他们想要选择的员工。但是,当我去检查用户单击的位置时,所有复选框都未单击。 这是我的代码:
<asp:GridView runat="server" id="gvPickStaff" GridLines="Horizontal" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="idusers" HeaderText="ID " ReadOnly="true" />
<asp:BoundField DataField="first_name" HeaderText="Name " ReadOnly="true" />
<asp:BoundField DataField="job_title" HeaderText="Job Title " ReadOnly="true" />
<asp:BoundField DataField="code_quality" HeaderText="Code Quality" ReadOnly="true" />
<asp:BoundField DataField="time_bonus" HeaderText="Time Bonus" ReadOnly="true" />
<asp:BoundField DataField="analysis_of_requirements" HeaderText="Analysis Of Requierements" ReadOnly="true" />
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="cbxSelect" runat="server" Checked="true" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
我发现问题所在的代码:
protected void btnAddStaff_OnClick(object sender, EventArgs e)
{
foreach(GridViewRow rowitem in gvPickStaff.Rows)
{
chk = (CheckBox)(rowitem.Cells[0].FindControl("cbxSelect"));
if(chk.Checked)
{
int staffid = Convert.ToInt32(gvPickStaff.DataKeys[rowitem.RowIndex]["idusers"]);
staffChosen.Add(staffid);
}
}
}
我这样填充gridview:
protected void fillStaffChoiceList()
{
string strConnection = ConfigurationSettings.AppSettings["ConnectionString"];
MySqlConnection connection = new MySqlConnection(strConnection);
MySqlCommand command = connection.CreateCommand();
MySqlDataReader reader;
command.CommandText = "SELECT idusers, first_name, job_title, code_quality, time_bonus,analysis_of_requirements FROM `test`.`users` WHERE security_level > 1";
//SELECT idusers, first_name, last_name, job_title, code_quality, time_bonus,analysis_of_requirements FROM `test`.`users` WHERE security_level > 1;
connection.Open();
reader = command.ExecuteReader();
gvPickStaff.DataSource = reader;
gvPickStaff.DataBind();
connection.Close();
}
谁能看出我哪里出错了?
【问题讨论】:
-
一开始你的所有复选框都没有选中吗?你什么时候打电话给
fillStaffChoiceList()?如果您在 Page_Load 中调用它而不使用if (!IsPostBack),那么在您点击按钮单击处理程序之前,它将重新绑定并丢失您的复选框状态。