1

これが私のコードです:

DataSet data = new DataSet();
data.ReadXml("data.xml");

DataGridView grid = new DataGridView();

var genreCboBoxItems = data.Tables[0].AsEnumerable().Select(genre => genre.Field<string>("genre")).Distinct().ToArray();

// TODO: Make is so the 'genre' column in grid is a combo box?

grid.DataSource = data.Tables[0];
grid.Dock = DockStyle.Fill;
this.Controls.Add(grid);

*編集: ジャンルCboBoxItems

4

3 に答える 3

2

これを試してください:(テストされていません

var column = new DataGridViewComboBoxColumn();

column.DataSource = data.Tables[0].AsEnumerable().
      Select(genre => new { genre = genre.Field<string>("genre") }).Distinct();
column.DataPropertyName = "genre";
column.DisplayMember = "genre";
column.ValueMember = "genre";
grid.DataSource = data.Tables[0];
// Instead of the below line, You could use grid.Columns["genre"].Visible = false;
grid.Columns.Remove("genre");  
grid.Columns.Add(column);  
于 2013-05-12T16:24:21.497 に答える
0

最初に、適切な名前のデザイナーを使用して DataGridViewComboBoxColumn を作成します。次に、その datagridview にバインドする文字列リストとその他の文字列値のリストがあるとします。次のコードを使用します。以下のコードは、リストを 2 つの DataGridViewTextBoxCell と DataGridViewComboBoxCell にバインドします。注意 AllCriterias は、2 つの文字列値と文字列のリストを持つリストです。DGVEligibilityCriteria はグリッド名です。

for (int i = 0; i < AllCriterias.Count; i++)
            {
                DataGridViewTextBoxCell Cmb1 = (DataGridViewTextBoxCell)DGVEligibilityCriteria.Rows[i].Cells[0];
                Cmb1.Value = AllCriterias[i].Name;
                DataGridViewTextBoxCell Cmb2 = (DataGridViewTextBoxCell)DGVEligibilityCriteria.Rows[i].Cells[1];
                Cmb2.Value = AllCriterias[i].Type;
                DataGridViewComboBoxCell Cmb = (DataGridViewComboBoxCell)DGVEligibilityCriteria.Rows[i].Cells[2];
                foreach (var filtervalue in AllCriterias[i].FilterValues)
                {
                    Cmb.Items.Add(filtervalue);
                }
             }

selectindex プロパティを設定して、最初のインデックスをデフォルトとして表示する必要があります。このコードを使用します。ここで、「filterValues」は、datagridview デザイナーで作成した DataGridViewComboBoxCell の名前です。

foreach (DataGridViewRow  row in DGVEligibilityCriteria.Rows)
            {
                row.Cells["filterValues"].Value = (row.Cells["filterValues"] as DataGridViewComboBoxCell).Items[0];
            }
于 2015-03-25T18:12:59.620 に答える