4

我在这里动态创建 GridView扩展我的问题并按照建议尝试不同的方法,但我又卡住了。

我有一个表来处理我的名字和键值的顺序。

KeyNames:
ID Int primary key
KeyName1 varchar(20)
KeyOrder int
KeyName2 varchar(20)
KeyOrder int
...
KeyNameN varchar(20)
KeyOrder int

这些键表示要在网格视图中显示的另一个表的名称和顺序。IE:

 DocumentTable:
 ID int primary key
 PDF_Folder varchar(30)
 Key1value varchar(100)
 Key2value varchar(100)
 ..
 KeyNvalue varchar(100)

因此,在我的网格视图中,用户可以决定键的列名和值(我可能想调用 Key1“描述”顺序 1 和 Key2“提到的名称”和顺序 2。

如果 Order < 0 那么它将不会显示在 gridview 中。

我坚持如何创建一个网格视图来显示 KeyNValue 的每一列,其列名称为 KeyNameN 和 KeyOrderN 的顺序。

4

2 回答 2

1

您将使用 DataGridViewColumn 的 DisplayIndex 属性来设置 Order。您将使用 HeaderText 属性来设置名称。我看到你没有行,所以网格将只有一行有很多列。

因此,假设您有一个名为 MyGrid 的网格,每一列都在一个名为 MyEntityRecord 的类中,您已将所有列放在一个列表中,并且您希望在用户单击按钮后显示数据,这是一个示例代码从点击事件。

void ShowCustomGrid(List<MyEntityRecord> aList)
{
    MyGrid.Columns.Clear();
    MyGrid.Rows.Clear();
    for(int loop=0;loop<aList.Count;loop++)
    {
        MyGrid.Columns.Add(new DataGridViewColumn(new DataGridViewTextBoxCell()));
        MyGrid.Columns[loop].Text=aList[loop].KeyName;
        if(aList[loop].KeyOrder<0) MyGrid.Columns[loop].Visible=false;
    }
    //Now that all columns have been added, change the display index
    for(int loop=0;loop<aList.Count;loop++)
    {
         if(aList[loop].KeyOrder>=0) MyGrid.Columns[loop].DisplayIndex=aList[loop].KeyOrder;
    }
    //Finally, put the values
    MyGrid.Rows.Add();
    for(int loop=0;loop<aList.Count;loop++)
    {
        if(aList[loop].KeyOrder>=0) MyGrid.Rows[0].Cells[loop].Value=aList[loop].KeyValue;
    }
}

如果我理解正确,这应该做你想要的。

于 2012-07-21T11:03:10.477 回答
0

craete 表脚本:
CREATE TABLE [dbo].[KeyNames](
[ID] [int] NOT NULL,
[KeyName] [varchar](50) NOT NULL,
[keyOrder] [int] NOT NULL
) ON [PRIMARY]


CREATE TABLE [dbo].[DocumentTable](
[ID] [int] NOT NULL,
[PDF_Folder] [varchar](50) NOT NULL,
[Key1Value] [varchar](100) NOT NULL,
[Key2Value] [varchar](100) NOT NULL,
[Key3Value] [varchar](100) NOT NULL
) ON [PRIMARY]

=============键名表:行========
1 PDF_Folder 2
2 Key1Value 3
3 Key3Value 5
4 Key2Value 4
5 ID 1
======== ====================================

==============文档表:行========
1 aa a1 a2 a3
2 bbb b1 b2 b3
3 ccc c1 c2 c3
========= ==================================


如下查询是生成动态订单查询:

DECLARE @str_column VARCHAR(100);
声明@query VARCHAR(100);
SELECT @str_column = COALESCE(@str_column + ', ', '') + KeyName
FROM Keynames order by keyorder;
设置 @query= 'select ' + @str_column + ' 从 DocumentTable';
执行(@查询);

于 2012-07-20T07:38:11.483 回答