在尝试从GridView控件中的多行中选择和提取数据时,我的代码中遇到了一个奇怪的错误/错误。
背景 简而言之,我有一个GridView项目,填充了一系列不同的设备项目,这些设备项目已“签入”并可用于检查我们的系统。我想让用户能够选择多个项目并立即检查它们,而不是X次。
我在每行使用一个复选框项来执行此操作,如下所示:http://i.imgur.com/fPYV2.png
底部有一个按钮可以检查我们数据库中的设备。
代码: 我用来生成ASPX页面的代码是:
<asp:GridView ID="grdEquipment" runat="server" AutoGenerateColumns="false" ShowHeaderWhenEmpty="true" CssClass="table table-bordered">
<Columns>
<asp:TemplateField HeaderText="Select">
<ItemTemplate>
<asp:CheckBox ID="chkMultiSelect_Out" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="Equipment Name" DataField="Name" />
<asp:BoundField HeaderText="Category" DataField="Category.Name" />
</Columns>
<EmptyDataTemplate>
There is no equipment to display.
</EmptyDataTemplate>
</asp:GridView>
<div class="well">
<asp:Button ID="btnCheckOut" runat="server" CssClass="btn btn-small btn-inverse" Text="Check Out" OnClick="btnCheckOut_Click" />
</div>
这可以正常运行并编译。
运行按钮以检查所有内容的代码是:
protected void btnCheckOut_Click(object sender, EventArgs e)
{
int checkoutNumber = 0;
//string id = (sender as Button).Attributes["data-id"].ToString();
SortedBindingList<Tracker.Business.Equipment> eqList = Tracker.Business.EquipmentList.FetchAll();
foreach (GridViewRow row in this.grdEquipment.Rows)
{
CheckBox chkMultiSelect_Out = (CheckBox)row.FindControl("chkMultiSelect_Out") ;
if (chkMultiSelect_Out.Checked)
{
checkoutNumber++;
Tracker.Business.Equipment equip = Tracker.Business.Equipment.GetByIdentification(Int32.Parse(row.ID.ToString()));
eqList.Add(equip);
}
}
//If checkoutNumber is 0, do nothing.
//If checkoutNumber is 1, launch popup for only 1 item
//If checkoutNumber is more than 1, launch popup for multiple items.
if (checkoutNumber == 0)
{
Response.Redirect("~/Equipment/CheckInOut/Default.aspx");
}
else if (checkoutNumber == 1)
{
}
else if (checkoutNumber > 1)
{
}
}
现在,显然,这段代码还没有完成。我正在调试,以便让我的生活更轻松。 重要的代码是foreach循环,我检查控件项的每一行,看看它是否被选中。
问题: 当我运行代码并检查一些复选框时,它会查看所有行,并且所有行都有“Checked = false”作为属性。更糟糕的是,我后来发现它甚至没有从行中获取数据,如此屏幕截图所示:http://i.imgur.com/clRuk.png
文本应为“Optimus Prime”或“Switch#1”,但不是!当我运行代码时,两者都会被检查,但代码只会看到错误的检查项目。
代码遍历每行的foreach循环,即3行,它在循环中运行3次。所以它看到每一行,但它没有拉动数据......
我应该从哪里开始寻找?
答案 0 :(得分:0)
我解决了我的问题。正如Tim Schmelter所说的那样,我在每次点击时都回发了页面,因此我将代码更改为仅在页面加载时数据绑定gridview表,而不是在帖子后面。立即行动!