4

ここで質問を拡張しています GridView を動的に作成し、提案されている別のアプローチを試みていますが、再び立ち往生しています。

名前とキー値の順序を処理するテーブルがあります。

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

これらのキーは、グリッドビューに表示される別のテーブルの名前と順序を表します。すなわち:

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

したがって、私のグリッドビューでは、ユーザーはキーと値の列名を決定できます (Key1 の「説明」順序 1 と Key2 の「言及された名前」と順序 2 を呼び出すことができます。

Order < 0 の場合、グリッドビューには表示されません。

列名 KeyNameN と KeyOrderN の順序で KeyNValue の各列を表示するグリッドビューを作成する方法にこだわっています。

4

2 に答える 2

1

Order を設定するには、DataGridViewColumn の DisplayIndex プロパティを使用します。名前を設定するには、HeaderText プロパティを使用します。行がないことがわかりました。そのため、グリッドには多くの列を持つ 1 つの行しかありません。

したがって、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

テーブル作成スクリプト :
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 [プライマリ]

==============キー名テーブル:行========
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 + ', ', '') + KeyName
FROM Keynames order by keyorder;
set @query= 'select ' + @str_column + ' from DocumentTable';
exec(@クエリ);

于 2012-07-20T07:38:11.483 に答える