更改从数据表提供的datagridview中的文本

本文关键字:datagridview 文本 数据表 | 更新日期: 2023-09-27 17:54:27

我想更改datagridview的一列中的文本,该列是为了表示而从数据表中输入的(特别是我想将其中的术语翻译成另一种语言)。我假设我可以通过将整个数据移动到我自己的表中并在那里修改它来做到这一点,但如果可以避免,我宁愿不这样做。你知道吗?

更改从数据表提供的datagridview中的文本

对DataGridView进行此操作的正确方法是使用MSDN上描述的cellformatting事件。在HowTo文章中有一个很好的例子,但我在这里也给出了一个概述。

首先,您需要通过设计视图或通过代码订阅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";
        }
    }
}

这不会改变数据集中的底层值——只会改变显示的值,并且在每个单元格离开事件之后触发事件,因此用户可以在网格中键入数据(如果它不是只读的),并且将应用格式化。

当然,所有这些都是可以自定义的,但cellformatting事件是最好的起点。

首先要做的是正确绑定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;
}

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