2014-09-30 4 views
0

Я SQL DBA с низким уровнем квалификации в VS C# и Winforms. Я изо всех сил пытался добавить поле со списком в столбец DataGridView несколько дней и отказался. У меня есть dat1 dat1 и datagridview dg1. dg1.Datasource = dt1; dt1 является членом набора данных ds1. Я предоставляю комбинированные элементы из массива.Как добавить ComboBox в WINFORM datagridview привязан к datatable

Я пробовал автогенерирование true и false.

Если автогенерация = правда я получаю два столбца с тем же именем с 1 со списком, и это в неправильном положении колонки, и я получаю правильные данные из dT1

Если ложь, и я программно определить столбцы для DG1, я дон Не получайте данные из dt1.

Каким должен быть мой код и какие возможные привязки или свойства отсутствуют, поэтому я добавляю комбинированное поле для «GRADE» в позиции 4-го столбца, а dg1 заполняется из dt1 и комбо из массива.

Полностью расстроен после чтения десятков блогов и попыток в течение нескольких дней. Пожалуйста помоги.

private DataGridViewComboBoxColumn CreateComboBox() 
    { 
     DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn(); 
     { 
      combo.Name = "comboColumn"; 
      combo.HeaderText = "Grade"; 
      ArrayList drl = new ArrayList(); 
      drl.Add("GS1"); 
      drl.Add("GS2"); 
      drl.Add("WG1"); 
      drl.Add("WG2"); 
      combo.Items.AddRange(drl.ToArray()); 
      combo.DataSource = drl; 
      //combo.ValueMember = "EmployeeID"; 
      //combo.DisplayMember = "Grade"; 
      //combo.DataPropertyName = "Grade"; 
     } 
     return combo; 
    } 

    public Employee() 
    { 
     InitializeComponent(); 
     WindowState = FormWindowState.Maximized; 
     Ds1 = new DataSet("ds1"); 

     Dt1 = new DataTable("dt1"); 

     ds1.Tables.Add(dt1); 

     dt1.Columns.Add("EmployeeID"); 
     dt1.Columns.Add("FirstName"); 
     dt1.Columns.Add("LastName"); 
     dt1.Columns.Add("Grade"); 
     dt1.Columns.Add("DOB"); 

     //initialize datagridview 
     Dg1.AutoGenerateColumns = true; 

     //dg1.Columns.Add("column4", " EmployeeID "); 
     // dg1.Columns.Add("column4", " FirstName "); 
     // dg1.Columns.Add("column4", " LastName "); 
    Dg1.Columns.Add(CreateComboBox()); 
     // dg1.Columns.Add("column5", " DOB "); 

     Dg1.DataSource = dt1; 

    } 

ответ

0

Постановили: После нескольких дней охоты и попробовать, я попробовал решение, которое я не думал, что будет работать, потому что упомянутый несвязанный столбец и казалось, требуют SQL или какой-либо другой связи делают его связанный столбец. Оказывается, нет необходимости связывать столбцы. Вот что ты делаешь.

1.Open your Form designer an place Focus on your DataGridView and select properties. 

2.Scroll down to the Columns collection (mine was at the bottom under Misc.) and expand the collection. 
3.Add Column name and if binding to DataTable set the DataPropertyName to the dt column. In my case I set both the same. 
Also there is a drop down to choose the ColumnType 
4.Add your ComboBox column. This has a few more settings. You should look through all of them but I was interested in Items & 
HeaderText only. I set HeaderText the same as ColumnName & 
DataPropertyName. I then opened the Items and added my list. 
There is also a DataSource. I presume that is for populating your 
ComboBox from a database, service, or sharepoint but I'm not doing 
that. 
5.That's it. 

В файле кода .cs вам необходимо вставить две строки кода. Я поставил шахту в верхней части формы, где я объявляю данные, которые мне нужны для всех методов.

<yourdatagridview>.AutoGenerateColumns = false; 
<yourdatagridview>.DataSource = <yourdatatable>;