2016-06-11 2 views
1

У меня есть DGV с предварительно определенными столбцами, как показано ниже, и здесь способ генерации и обязательный методомDataTable Пры Задаваемых DataGridView Столбцов

fixGridAlarm(dgvAlarmlar); 


public void fixGridAlarm(DataGridView gvw) 
    { 
     gvw.AutoGenerateColumns = false; 
     gvw.RowTemplate.Height = 75; 
     gvw.ColumnCount = 3; 
     gvw.Columns[0].Name = "No"; 
     gvw.Columns[0].Width = 60; 
     gvw.Columns[0].ReadOnly = true; 
     gvw.Columns[0].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; 
     gvw.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; 
     gvw.Columns[1].Name = "Tarih/Saat"; 
     gvw.Columns[1].Width = 490; 
     gvw.Columns[1].ReadOnly = true; 
     gvw.Columns[1].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; 
     gvw.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; 
     gvw.Columns[2].Name = "Açıklama"; 
     gvw.Columns[2].Width = 1195; 
     gvw.Columns[2].ReadOnly = true; 
     gvw.Columns[2].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; 
     gvw.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; 

     BindAlarmlarGrid(); 

    } 


    public void BindAlarmlarGrid() 
    { 
     string CSVFilePathName = pathAlarms; 
     string[] Lines = File.ReadAllLines(CSVFilePathName); 
     string[] Fields; 
     DataTable dt = new DataTable(); 
     dt.Columns.Add(dgvAlarmlar.Columns[0].Name, typeof(int)); 
     dt.Columns.Add(dgvAlarmlar.Columns[1].Name, typeof(DateTime)); 
     dt.Columns.Add(dgvAlarmlar.Columns[2].Name, typeof(string)); 
     DataRow Row; 
     for (int i = 0; i < Lines.GetLength(0); i++) 
     { 
      Fields = Lines[i].Split(new char[] { ',' }); 
      Row = dt.NewRow(); 
      for (int f = 0; f < 3; f++) 
      { 
       Row[f] = Fields[f]; 
      } 
      dt.Rows.Add(Row); 
     } 
     dgvAlarmlar.DataSource = dt; 

Когда я дать его DataSource в качестве DataTable столбцов добавляются рядом с оригинальным DGV как я могу привязать его к исходной сетке вместо следующего?

+0

Dont вы должны вызвать 'dgvAlarmlar.DataBind()' после 'dgvAlarmlar.DataSource = дт;' –

+0

Это WinForm не asp.net @AlexW – CanESER

+0

им трудно понять, в чем проблема –

ответ

0

я решил мою проблему с изменением моего метода связывания, как, что вместо того, чтобы использовать связывание DataTable

public void BindAlarmlarGrid() 
    { 
     string CSVFilePathName = pathAlarms; 
     string[] Lines = File.ReadAllLines(CSVFilePathName); 
     string[] Fields; 

     for (int i = 0; i < Lines.GetLength(0); i++) 
     { 
      Fields = Lines[i].Split(new char[] { ',' }); 
      dgvAlarmlar.Rows.Add(Fields); 
     } 
    } 
0

данных требует, чтобы установить DataGridViewColumn.DataPropertyName свойство, как объяснено в Замечания раздел документации MSDN:

Если для свойства AutoGenerateColumns установлено значение true, каждый столбец автоматически устанавливает его свойство DataPropertyName в имя столбца свойства или базы данных в файле sourc e, заданное свойством DataSource. Это связывание также может быть выполнено вручную, что полезно, если вы хотите отображать только подмножество столбцов свойств или базы данных, доступных в источнике данных. В таких случаях установите для свойства AutoGenerateColumns значение false, а затем вручную добавьте каждый элемент DataGridViewColumn, установив значение каждого свойства DataPropertyName в столбцы свойств или базы данных в источнике данных, который вы хотите отобразить.

Вы можете сделать свой оригинальный код работать к примеру, как это:

public void fixGridAlarm(DataGridView gvw) 
{ 
    // ... 
    for (int i = 0; i < gvw.Columns.Count; i++) 
     gvw.Columns[i].DataPropertyName = gvw.Columns[i].Name; 
    BindAlarmlarGrid(); 
}