在尝试从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循环,在这个循环中,我检查控制项的每一行,并检查它是否被选中。
问题:当我运行代码并使用选中的一些复选框进行测试时,它会查看所有的行,并且所有行都将“= false”作为属性。更糟糕的是,我后来发现它甚至没有从行中获取数据,如下面的屏幕截图所示:http://i.imgur.com/clRuk.png
文本应该是“擎天柱”或“开关#1",但它不是!当我运行代码时,这两个选项都会被检查,但是代码只会看到错误的选中项。
代码通过每个行的foreach循环,即3行,它在循环中运行3次。所以它看到了每一行,但它并没有提取数据.
我该从哪里开始找呢?
发布于 2013-01-11 12:42:55
我解决了我的问题。正如Tim Schmelter所说,我每次点击时都会回发页面,所以我将代码更改为只在页面加载时将网格视图表数据库化,而不是在回发帖上。现在起作用了!
https://stackoverflow.com/questions/14247868
复制