2016-06-11 4 views
1

Ich habe ein DGV mit vordefinierten Spalten wie unten und hier sind Erzeugungsverfahren und BindeverfahrenDatatable vordefinierte Datagridview Columns

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; 

Wenn ich seine DataSource als DataTable Spalten geben werden neben dem Original DGV hinzugefügt Wie kann ich es auf das ursprüngliche Gitter anstatt auf das nächste binden?

+0

müssen Sie nicht rufen müssen 'dgvAlarmlar.DataBind();' 'nach dgvAlarmlar.DataSource = dt;' –

+0

Es ist winform nicht asp.net @AlexW – CanESER

+0

ich finde es schwer zu sehen, was das Problem ist –

Antwort

0

löste ich mein Problem mit meinen Bindungsverfahren wie das Ändern anstelle von 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

Daten erfordert, dass Sie die Bindung die DataGridViewColumn.DataPropertyName Eigenschaft zu setzen, wie sie in den Bemerkungen Abschnitt der Dokumentation MSDN erklärt:

Wenn die AutoGenerateColumns-Eigenschaft auf true festgelegt ist, legt jede Spalte ihre DataPropertyName-Eigenschaft automatisch auf den Namen einer Eigenschaft oder Datenbankspalte in der Datenquelle fest e wird von der DataSource-Eigenschaft angegeben. Diese Bindung kann auch manuell ausgeführt werden. Dies ist nützlich, wenn Sie nur eine Teilmenge der in der Datenquelle verfügbaren Eigenschaften oder Datenbankspalten anzeigen möchten. Setzen Sie in solchen Fällen die AutoGenerateColumns-Eigenschaft auf false und fügen Sie dann jede DataGridViewColumn manuell hinzu, und legen Sie den Wert jeder DataPropertyName-Eigenschaft auf die Eigenschaften oder Datenbankspalten in der Datenquelle fest, die Sie anzeigen möchten.

Sie können Ihre Original-Code arbeiten zum Beispiel wie folgt machen:

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