Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridView在初始绘图时不显示自定义列的内容_C#_Winforms_Datagridview - Fatal编程技术网

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

C# DataGridView在初始绘图时不显示自定义列的内容,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个dataGridView,它作为数据源绑定到一个“kit”对象列表。我编写了一个方法AddLocalizedStringColumn(),它添加了一个新的 列添加到数据网格(“Localized String”),并通过从另一列(“stringCode”)读取数据来填充它。如果列已经存在 它只是更新列的值。我将此方法放置在基于datagrid的数据源何时更改的事件中 调试器确认所有单元格值都已正确分配,包括cell.FormattedValue。但是,在查看网格时 第一次,该列是空白的!

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

列添加到数据网格(“
Localized String
”),并通过从另一列(“
stringCode
”)读取数据来填充它。如果列已经存在

它只是更新列的值。我将此方法放置在基于datagrid的数据源何时更改的事件中

调试器确认所有单元格值都已正确分配,包括
cell.FormattedValue
。但是,在查看网格时

第一次,该列是空白的!即使在第一次加载期间运行了两次,本地化字符串列仍保持空白。如果我运行

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);
}
public static void AddLocalizedStringField(此DataGridView gridView、字符串LocaleStringdProperty、字符串columnTitle、int-valueIndex)
{
if(string.IsNullOrEmpty(localestringiproperty))返回;
if(string.IsNullOrEmpty(columnTitle))返回;
if(valueIndex<0 | | valueIndex>=gridView.Columns.Count)返回;
if(gridView.Columns.Contains(localestringiproperty)==false)返回;
if(gridView.Columns.Contains(columnTitle))
{
valueIndex=gridView.Columns.IndexOf(gridView.Columns[columnTitle]);
}
其他的
{
DataGridViewColumn newColumn=新DataGridViewColumn();
newColumn.Name=columnTitle;
newColumn.CellTemplate=新的DataGridViewTextBoxCell();
gridView.Columns.Insert(valueIndex,newColumn);
}
int-ididex=gridView.Columns.IndexOf(gridView.Columns[localeStringIDProperty]);
foreach(gridView.Rows中的DataGridViewRow行)
{
DataGridViewCell foundCell=row.Cells[columnTitle];
foundCell.Value=“英文文本”;
gridView.InvalidateCell(foundCell);
}
}
DataGridView dataGridViewStores=新DataGridView();
List _listOfStores=新列表();
public void SetupForm()//作为构造函数的一部分运行
{
/*_存储列表中充满了条目*/
dataGridViewStores.DataSource=_listOfStores;
dataGridViewStores.AddLocalizedStringField(“storeName”,“translated name”,2);
//该列出现,但为空。调试器显示其所有单元格都具有正确的内容。
}
公共列()
{
//显示表单后运行此操作将正确显示本地化值。
dataGridViewStores.AddLocalizedStringField(“storeName”,“translated name”,2);
}

如果您发布了一个复制问题的完整小示例,这将非常有用。该代码是专有的,但我添加了一个类似的示例。