DataGridView在初始绘制时不显示自定义列的内容

时间:2015-11-10 03:34:55

标签: c# winforms datagridview

我有一个dataGridView,它绑定到“kit”对象列表作为数据源。我编写了一个方法AddLocalizedStringColumn(),添加了一个新的

指向datagrid(“Localized String”)的列,并通过读取另一列(“stringCode”)中的数据来填充它。如果列已存在,

它只是更新列的值。我已根据datagrid的数据源更改时间将此方法放在事件中。

调试器确认正确分配了所有单元格值,包括Cell.FormattedValue。但是,在查看

的网格时

第一次,列是空白的!即使在第一次加载期间运行两次,Localized String列仍为空白。如果我运行

初始绘制后第二次

AddLocalizedStringColumn方法,无论是按钮还是按事件,它都会正确显示值。

我不确定为什么会这样。我只能想象它与dataGrid的初始绘制有关。

虽然实际代码是专有的,但这是一个类似的例子。

public static void AddLocalizedStringField(this DataGridView gridView, string localeStringIDProperty, string columnTitle, int valueIndex)
  {
            if (string.IsNullOrEmpty(localeStringIDProperty)) return;
            if (string.IsNullOrEmpty(columnTitle)) return;
            if (valueIndex < 0 || valueIndex >= gridView.Columns.Count) return;

            if (gridView.Columns.Contains(localeStringIDProperty) == false) return;

            if (gridView.Columns.Contains(columnTitle))
            {
               valueIndex = gridView.Columns.IndexOf(gridView.Columns[columnTitle]);
            }
            else
            {
                DataGridViewColumn newColumn = new DataGridViewColumn();

                newColumn.Name = columnTitle;
                newColumn.CellTemplate = new DataGridViewTextBoxCell();

                gridView.Columns.Insert(valueIndex, newColumn);


            }

            int idIndex = gridView.Columns.IndexOf(gridView.Columns[localeStringIDProperty]);
            foreach(DataGridViewRow row in gridView.Rows)
            {

                DataGridViewCell foundCell = row.Cells[columnTitle];
                foundCell.Value = "English Text";
                gridView.InvalidateCell(foundCell);

            }

        }
 DataGridView dataGridViewStores = new DataGridView();
 List<Store> _listOfStores = new List<Store>();
public void SetupForm() // Runs as part of the constructor
{
    /* _listOfStores is filled with entries.*/

     dataGridViewStores.DataSource = _listOfStores;
     dataGridViewStores.AddLocalizedStringField("storeName", "translated name", 2);

     // The column appears but is blank.  The debugger shows all its cells have the correct contents.
}

public void RefreshColumn()
{
    // Running this after the form is displayed shows the localized values correctly.
    dataGridViewStores.AddLocalizedStringField("storeName", "translated name", 2);
}

0 个答案:

没有答案