我对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中选择了一些之后,但我不知道它们是否完全相关。有没有更好的方法来做到这一点?
很抱歉,如果措辞不当。请告诉我您需要的其他信息。
非常感谢你的帮助!
答案 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)
您是否尝试过以下操作:
HeaderText
值。您可以像这样设置列的HeaderText:
Gridview4.Columns[2].HeaderText = attribute1ValueFromProductGroupRecord
您只需为每列执行一次,可能在Page_Load。