Проблема: я написал GridView в разметке на странице. Я кодировал DataTable в коде позади, который берет данные из коллекции пользовательских объектов. Затем я связываю этот DataTable с GridView. (Конкретная проблема упоминается парой фрагментов кода ниже.)
Разметка GridView:
<asp:GridView ID="gvCart" runat="server" CssClass="pList" AutoGenerateColumns="false" DataKeyNames="ProductID">
<Columns>
<asp:BoundField DataField="ProductID" HeaderText="ProductID" />
<asp:BoundField DataField="Name" HeaderText="ProductName" />
<asp:ImageField DataImageUrlField="Thumbnail" HeaderText="Thumbnail"></asp:ImageField>
<asp:BoundField DataField="Unit Price" HeaderText="Unit Price" />
<asp:TemplateField HeaderText="Quantity">
<ItemTemplate>
<asp:TextBox ID="Quantity" runat="server" Text="<%# Bind('Quantity') %>" Width="25px"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Total Price" HeaderText="Total Price" />
</Columns>
</asp:GridView>
DataTable Code-Behind:
private void View(List<OrderItem> cart)
{
DataSet ds = new DataSet();
DataTable dt = ds.Tables.Add("Cart");
if (cart != null)
{
dt.Columns.Add("ProductID");
dt.Columns.Add("Name");
dt.Columns.Add("Thumbnail");
dt.Columns.Add("Unit Price");
dt.Columns.Add("Quantity");
dt.Columns.Add("Total Price");
foreach (OrderItem item in cart)
{
DataRow dr = dt.NewRow();
dr["ProductID"] = item.productId.ToString();
dr["Name"] = item.productName;
dr["Thumbnail"] = ResolveUrl(item.productThumbnail);
dr["Unit Price"] = "$" + item.productPrice.ToString();
dr["Quantity"] = item.productQuantity.ToString();
dr["Total Price"] = "$" + (item.productPrice * item.productQuantity).ToString();
dt.Rows.Add(dr);
}
gvCart.DataSource = dt;
gvCart.DataBind();
gvCart.Width = 500;
for (int counter = 0; counter < gvCart.Rows.Count; counter++)
{
gvCart.Rows[counter].Cells.Add(Common.createCell("<a href='cart.aspx?action=update&prodId=" +
gvCart.Rows[counter].Cells[0].Text + "'>Update</a><br /><a href='cart.aspx?action='action=remove&prodId=" +
gvCart.Rows[counter].Cells[0].Text + "/>Remove</a>"));
}
}
}
Ошибка происходит ниже в foreach - GridViewRowCollection пуст!
private void Update(string prodId)
{
List<OrderItem> cart = (List<OrderItem>)Session["cart"];
int uQty = 0;
foreach (GridViewRow gvr in gvCart.Rows)
{
if (gvr.RowType == DataControlRowType.DataRow)
{
if (gvr.Cells[0].Text == prodId)
{
uQty = int.Parse(((TextBox)gvr.Cells[4].FindControl("Quantity")).Text);
}
}
}
Цель: я в основном пытаюсь найти способ обновить данные в моем GridView (и, что более важно, в моем объекте Session корзины) без необходимости делать все остальное, что я видел в Интернете, например, использование OnRowUpdate и т. Д. скажите, пожалуйста, почему gvCart.Rows пуст и / или как я могу достичь своей цели, не используя OnRowUpdate и т. д.? Когда я выполняю этот код, GridView заполняется, но по какой-то причине я не могу получить доступ ни к одной из его строк в коде позади.