订购时使用的最佳清单

时间:2012-07-16 23:47:14

标签: c# asp.net sql sql-server

我在这里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的每一列。

2 个答案:

答案 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);