2013-01-17 42 views
0

我想更改datagridview的某列中的文本,該文本是從數據表中爲演示目的而提供的(具體而言,我想將這些術語翻譯爲另一個語言) 。我假設我可以通過將整個數據移動到我自己的表中並在那裏修改它,但是如果它是可以避免的,我寧願不要這樣做。任何想法 ?更改從數據表提供的datagridview中的文本

+0

你的Datagrid綁定到數據表? – Derek

+0

是的,第一行是this.dataGridView1.DataSource = mydatatable; –

+0

我已經從原始(現已刪除)的問題中獲取了您不想更改數據的信息 - 僅顯示文本,並據此回答。讓我知道如果這不再成立。另外 - 對於翻譯,您可能會更好地提取數據並在數據表中到達datagridview之前對其進行翻譯。單元格格式化方法更多地意味着將代碼轉換爲有意義的文本。 –

回答

0

要做的第一件事就是正確綁定DataGridView和DataTable。

BindingSource bs = new BindingSource(); 

bs.Datasource = mydatatable; 

dataGridView1.Datasource = bs; 

您在DataTable中所做的任何更改都會自動反映到數據網格中,反之亦然。

接下來,您可能可能遍歷DataTable中的每一行。您可以在每行的指定列中翻譯該值。像這樣的東西: -

foreach(DataRow row in mydatatable.rows) 
{ 
    // Do your translation code 

    row["SpecificColumnName"] = yourTranslatedvalue; 
} 

它的非常基本的東西,但它可以幫助你開始。

1

使用DataGridView執行此操作的正確方法是使用CellFormating事件,在MSDN上描述here。在HowTo Article中有一個很好的例子,但我在這裏也給出了一個概述。

首先,你需要訂閱CellFormating事件,無論是通過設計視圖或通過代碼:

this.dataGridView1.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.dataGridView1_CellFormatting); 

然後在事件處理程序,你把你的邏輯格式化你的數據顯示:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    if (!dataGridView1.Rows[e.RowIndex].IsNewRow && e.ColumnIndex == dataGridView1.Columns["InterestingColumn"].Index) 
    { 
     if (e.Value == null) 
      return; 

     if (e.Value.ToString() == "TargetValue") 
     { 
      e.Value = "DisplayValue"; 
     } 
    } 
} 

這不會改變DataSet中的基礎值 - 僅顯示值,並且事件在每個單元格離開事件後觸發,因此用戶可以將數據輸入到網格中(如果它不是隻讀的)並且將應用格式。

當然,所有這些都可以根據需要進行自定義,但CellFormating事件是最好的開始。

+0

謝謝!它工作,雖然我不得不刪除第一個條件(datagridview1.rows [e.ColumIndex] .IsNewRow。爲什麼你會使用列索引作爲一個索引的行? –

+0

對不起 - 這只是一個錯字,你當然會使用行索引。現在修復。 –

相關問題