我在这里Dynamically Creating GridView扩展我的问题并按照建议尝试不同的approch,但我再次陷入困境。
我有一个表来处理我的名字和键值的顺序。
KeyNames:
ID Int primary key
KeyName1 varchar(20)
KeyOrder int
KeyName2 varchar(20)
KeyOrder int
...
KeyNameN varchar(20)
KeyOrder int
这些键表示要在gridview中显示的另一个表的名称和顺序。即:
DocumentTable:
ID int primary key
PDF_Folder varchar(30)
Key1value varchar(100)
Key2value varchar(100)
..
KeyNvalue varchar(100)
因此在我的gridview中,用户可以决定Keys的列名和值(我可能想要调用Key1“description”order 1和Key2“Names Mentioned”和order 2。
如果订单< 0然后它将不会显示在gridview中。
我坚持如何使用colmn名称KeyNameN和KeyOrderN的顺序创建一个gridview来显示KeyNValue的每一列。
答案 0 :(得分:1)
您将使用DataGridViewColumn的DisplayIndex属性来设置Order。 您将使用HeaderText属性来设置名称。 我看到你没有行,所以网格只有一行有很多列。
因此,假设您有一个名为MyGrid的网格,每个列都在一个名为MyEntityRecord的类中,您已将所有列放在一个列表中,并且您希望在用户单击按钮后显示数据,这里是一个示例代码从Click事件中调用。
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;
}
}
如果我理解正确,这应该做你想要的。
答案 1 :(得分:0)
craete table script:
CREATE TABLE [dbo]。[KeyNames](
[ID] [int] NOT NULL,
[KeyName] [varchar](50)NOT NULL,
[keyOrder] [int] NOT NULL
)[主要]
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
)[主要]
==============键名表:行========
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);
DECLARE @query VARCHAR(100);
SELECT @str_column = COALESCE(@str_column +&#39;,&#39;,&#39;&#39;)+ KeyName
从Keynames订购keyorder;
设置@ query =&#39;选择&#39; + @str_column +&#39;来自DocumentTable&#39;;
EXEC(@query);