2014-01-12 60 views
0

我想在按下行標題時動態更新我的DataGridView單元格的值。DataGridView - 動態更新值

值更新但視圖不刷新。

void OnRowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 
    var databaseRecordId = e.RowIndex; 
    dataGridView1.Rows[e.RowIndex].Cells[0].Value = false; 
} 

簡單的解決方案,請?

+0

問題只出現在CheckBoxColumn中。 – dovid

回答

1

你的代碼是正確的,它的工作原理。

private void dgvNews_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 
     var databaseRecordId = e.RowIndex; 
     dgvNews.Rows[e.RowIndex].Cells[0].Value = "AAAAAA"; 
} 
+1

是的,它確實大聲笑。 – susparsy

1

你可以把這個更新後:

dataGridView1.refresh();

只是爲了看看它是否有幫助,否則我有其他幾個想法。

0
dataGridView1[0, e.RowIndex].Value = false; 
dataGridView1.EndEdit(); 

或:

dataGridView1[0, e.RowIndex].Value = false; 
dataGridView1.RefreshEdit(); 
0

您的代碼爲我工作。 我試過一個數據源,它是一個DataTable或一個對象列表。

數據源的類型是什麼?

恐怕您使用匿名類型作爲數據源,請記住它是隻讀的,因此您無法更新它。

您可以使用dataTable,或者我可以爲您提供一種將匿名類型轉換爲數據表的方法。

這不起作用:

  List<MyClass> myList = new List<MyClass>(); 
      myList.Add(new MyClass() { URL = "A", Path = "1" }); 
      myList.Add(new MyClass() { URL = "B", Path = "2" }); 
      myList.Add(new MyClass() { URL = "C", Path = "3" }); 
      myList.Add(new MyClass() { URL = "D", Path = "4" }); 
      myList.Add(new MyClass() { URL = "E", Path = "5" }); 

dataGridView1.DataSource = (from a in myList select new 
             { 
              URL = a.URL, 
              Path = a.Path 
             }).ToList(); 

private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 
      var databaseRecordId = e.RowIndex; 
      dataGridView1.Rows[e.RowIndex].Cells[0].Value = 555; 
} 

雖然這工作(與布爾列編)

DataTable x = new DataTable(); 
      x.Columns.Add("URL"); 
      x.Columns.Add("PAth"); 
      x.Columns.Add("Boolean"); 

      x.Rows.Add("A", "1", true); 
     x.Rows.Add("B", "1" , false); 
     x.Rows.Add("C", "1" , true); 
     x.Rows.Add("D", "1" , true); 
     x.Rows.Add("E", "1", true); 
     x.Rows.Add("F", "1", true); 
     x.Rows.Add("G", "1",true); 

dataGridView1.DataSource = x; 


    private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     var databaseRecordId = e.RowIndex; 
     dataGridView1.Rows[e.RowIndex].Cells[2].Value = false; 
    } 

我希望這有助於。

+0

問題只在於bool類型。 – dovid

+0

對不起,我沒有明白你的意思。你的意思是你可以更新匿名類型數據源中的字符串類型嗎? – user3185569

+0

使用帶有布爾列的DataTable嘗試查看結果。 – dovid