我有一个产品数量列表和一个网格视图。网格视图已绑定到某些数据。但我想在网格视图的第三列显示产品数量列表。以下是关于如何将数据绑定到网格视图的代码:
gvProduct.DataSource = distSPUItem;
gvProduct.DataBind();
BoundField column = new BoundField();
column = new BoundField();
column.HeaderText = "Unit Quantity";
for (int index = 0; index < productQuantityList.Count; index++)
{
column.DataField = index.ToString();
}
gvProduct.Columns.Add(column);
我需要循环通过产品数量列表并在网格视图的第三列显示结果。但是,该列未显示。任何解决方案?
提前致谢。
已编辑的部分
protected void gvProduct_RowDataBound(Object sender, GridViewRowEventArgs e)
{
int unitQuantity = 0;
if(e.Row.RowType == DataControlRowType.DataRow)
{
for(int index = 0; index < productQuantityList.Count; index++)
{
unitQuantity = productQuantityList[index];
}
Label lblUnitQuantity = (Label)e.Row.FindControl("lblUnitQuantity");
lblUnitQuantity.Text = unitQuantity.ToString();
}
}
答案 0 :(得分:1)
如果你在RowDataBound
事件中这样做会更好。首先,您需要在aspx代码中添加列OnRowDataBound="gvProduct_RowDataBound"
:
<asp:GridView ID="gvProduct" runat="server" AutoGenerateColumns="False" OnRowDataBound="gvProduct_RowDataBound">
<Columns>
<!-- Existing columns here -->
<asp:TemplateField HeaderText="Unit Quantity">
<ItemTemplate>
<asp:Label ID="lblUnitQuantity" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
然后在代码中的lblUnitQuantity
方法中设置gvProduct_RowDataBound
的文本值:
protected void gvProduct_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
int unitQuantity = productQuantityList[e.Row.RowIndex];
Label lblUnitQuantity = (Label)e.Row.FindControl("lblUnitQuantity");
lblUnitQuantity.Text = unitQuantity.ToString();
}
}
注意:对于数据源中的每一行,都会执行gvProduct_RowDataBound
,因此如果distSPUItem
有10个项目,那么gvProduct_RowDataBound
会在递增e.Row.RowIndex
时执行10次值从0开始。上述代码仅在productQuantityList
和distSPUItem
具有相同数量的项目时有效,否则将出错。
有关RowDataBound
事件的详情,请参阅here。
答案 1 :(得分:0)
我会尝试用这种方式解决问题:
假设您有一个产品项目,如下所示:
public class Product
{
public string Data1 { get; set; }
public string Data2 { get; set; }
public Product(string data1, string data2)
{
Data1 = data1;
Data2 = data2;
}
}
如果您需要其他信息,例如某种索引,请按以下方式创建类:
public class ProductExtended
{
public string Data1 { get; set; }
public string Data2 { get; set; }
public int Index { get; set; }
public ProductExtended(Product product, int index)
{
Data1 = product.Data1;
Data2 = product.Data2;
Index = index;
}
}
然后将产品项目列表转换为ProductExtended项目列表:
List<Product> products = new List<Product>();
// ...
int i = 0;
List<ProductExtended> productsExtended = products.Select(p => new ProductExtended(p, i++)).ToList();
最后将新列表绑定到您的网格。