0

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

4

2 回答 2

1

使用 DataGridView 执行此操作的正确方法是使用 CellFormating 事件,此处在 MSDN 上进行了描述。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 事件是最好的起点。

于 2013-01-18T12:56:31.183 回答
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;
}

它是非常基本的东西,但它可以帮助你开始。

于 2013-01-18T08:52:43.627 回答