以编程方式在网格视图列上显示数据

时间:2014-01-01 15:05:07

标签: c# asp.net gridview

我有一个产品数量列表和一个网格视图。网格视图已绑定到某些数据。但我想在网格视图的第三列显示产品数量列表。以下是关于如何将数据绑定到网格视图的代码:

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();
        }
    }

2 个答案:

答案 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开始。上述代码仅在productQuantityListdistSPUItem具有相同数量的项目时有效,否则将出错。

有关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();

最后将新列表绑定到您的网格。