如何将变量设置为gridview单元格?

时间:2011-03-17 00:14:27

标签: c# asp.net gridview

我对ASP比较新,所以这可能是一个简单的解决方案,我只是不知道(这里是希望!)。我正在使用C#在VisualStudio2010中工作。

基本上,我在SQL中有一个表,其中包含以下列:Product,ProductGroup,Attribute1Value,Attribute2Value,Attribute3Value

对于每个ProductGroup,属性定义都不同。例如,在ProductGroup1中,Attribute1是Size,Attribute1Value可能是2,3,5等。在ProductGroup2中,Attribute1是Quality,Attribute1Values是Standard,Economy,Premium等。

我一次只会引入一个产品组,并希望我的列标题反映属性定义(Header = Size,而不是适用时的Attribute1Value“。

我想要做的是使用ProductGroup,Attribute1,Attribute2,Attribute3列引入一个不可见的gridview,然后将列中的值指定为可用于重新分配列标题的变量。我已经能够根据其他变量(特别是下拉列表中的选定值)设置列标题,但是在设置变量等于gridview值的代码时出现问题。

当我尝试

    protected void Page_Load(object sender, EventArgs e)
    {
        lblAttribute1.Text = GridView4.Rows[0].Cells[2].Text;
    }

    protected void RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            e.Row.Cells[3].Text = lblAttribute1.Text;
        }
    }

我收到错误消息,指出我的索引超出了范围。我一开始认为这可能是因为我的Gridviews在页面加载时没有行,只有在从DropDowns中选择了一些之后,但我不知道它们是否完全相关。有没有更好的方法来做到这一点?

很抱歉,如果措辞不当。请告诉我您需要的其他信息。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

也许您可以尝试创建特定于不同产品组的类,然后根据需要将这些类绑定到您的网格(而不是从sql绑定原始数据)。

例如,您说ProductGroup1的属性代表Size。因此,创建一个更清晰的ProductGroup1表示的类,如:

public class ProductGroup1
{
  int Id{get;set;}
  int Size{get;set;}
}

对其他ProductGroup执行相同操作(即ProductGroup2类具有Quality属性)。

您提到您一次只会绑定一个产品组,因此我假设您将拥有通过ProductGroup选择数据的数据库查询。在这种情况下,从sql查询中获取返回的记录,并将每条记录转换/映射到您的一个类(例如上面的ProductGroup1)。

然后你应该得到一个List或Class of ArrayGroup类。然后,您可以使用列标题上的自动绑定将此列表或数组绑定到数据网格,因为它们将匹配您在类中定义的任何属性。

答案 1 :(得分:0)

您是否尝试过以下操作:

  1. 从产品记录中单独提取ProductGroup信息(因为所有产品记录中只有一个。
  2. 使用ProductGroup记录为Gridview列设置HeaderText值。
  3. 将网格绑定到产品。
  4. 您可以像这样设置列的HeaderText:

    Gridview4.Columns[2].HeaderText = attribute1ValueFromProductGroupRecord
    

    您只需为每列执行一次,可能在Page_Load。