C# 更改从datatable馈送的datagridview中的文本

C# 更改从datatable馈送的datagridview中的文本,c#,datagridview,C#,Datagridview,我想更改datagridview的一列中的文本,该列是出于演示的目的从datatable馈送的(特别是我想将其中的术语翻译成另一种语言)。我假设我可以通过将整个数据移动到我自己的表中并在那里修改它来做到这一点,但如果可以避免的话,我宁愿不这样做。有什么想法吗?首先要做的是正确绑定DataGridView和DataTable BindingSource bs = new BindingSource(); bs.Datasource = mydatatable; dataGridView1.Da

我想更改datagridview的一列中的文本,该列是出于演示的目的从datatable馈送的(特别是我想将其中的术语翻译成另一种语言)。我假设我可以通过将整个数据移动到我自己的表中并在那里修改它来做到这一点,但如果可以避免的话,我宁愿不这样做。有什么想法吗?

首先要做的是正确绑定DataGridView和DataTable

BindingSource bs = new BindingSource();

bs.Datasource = mydatatable;

dataGridView1.Datasource = bs;
您在DataTable中所做的任何更改都将自动反映在datagrid中,反之亦然

接下来,您也许可以遍历DataTable中的每一行。您可以为每行转换指定列中的值。大概是这样的:-

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

    row["SpecificColumnName"] = yourTranslatedvalue;
}

这是非常基本的东西,但它可能会帮助您开始。

使用DataGridView执行此操作的正确方法是使用MSDN上描述的CellFormating事件。这里有一个很好的例子,说明了您可以在中做些什么,但我在这里也给出了一个概述

首先,您需要通过设计视图或代码订阅
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";
        }
    }
}
这不会更改数据集中的基础值—仅更改显示的值,并且事件在每个单元格离开事件后触发,因此用户可以在网格中键入数据(如果它不是只读的),并应用格式


当然,所有这些都是可以自定义的,但CellFormating事件是最好的开始。

您的Datagrid是否绑定到datatable?是的,第一行是。dataGridView1.DataSource=mydatatable;我从原始(现在已删除)问题中获取了您不想更改数据的信息-仅显示文本,并根据该信息进行了回答。如果这种情况不再存在,请告诉我。此外,对于转换,您最好在数据表中的数据到达datagridview之前提取数据并进行转换。单元格格式更适合于将代码等内容更改为有意义的文本。谢谢!虽然我必须删除第一个条件(datagridview1.Rows[e.ColumIndex].IsNewRow),但它仍然有效。为什么要将列索引用作行的索引?抱歉,这只是一个输入错误。您当然会使用行索引。现已修复。