DataGridView Lookup - не удается установить ячейку в строку - неявное преобразование в Int32? - PullRequest
0 голосов
/ 11 марта 2019

Я работаю над приложением, которое отображает DataGridView таблицы, которая выглядит следующим образом:

FieldID | Value
---------------
1       | Jane
2       | Doe

У меня также есть Dictionary<int, String>, который позволяет мне выполнять поиск из FieldID в строкуверсия имени поля (имя, фамилия и т. д.)

Следуя приведенным здесь советам, Как создать поля LookUp в DataGridView? , я пытаюсь установить ячейки встолбец FieldID для их поиска dictionary[fieldID].Однако, когда я устанавливаю cell.Value, я получаю следующую ошибку (ошибка во время выполнения, всплывающее окно в моем приложении WinForms, а не в Visual Studio):

The following exception occurred in the DataGridView:
System.Exception: First Name is not a valid value for Int32. ----->
System.FormatException: Input string was not in a correct format
 at System.number.StringToNumber...

и т. Д.

Кодустановить ячейку следующим образом:

String value = dictionary[cell.Value]; //value = "First Name"
cell.Value = value; //Error occurs on this line

Моя проблема в том, что я не знаю, почему / где DataGridView конвертируется в Int32 - я никогда не заявлял, что столбец, содержащий FieldID, был строго int,Если он интерпретировал это таким образом, я попытался выполнить следующее до присвоения значения String ячейке:

dataGridView.Columns[0].CellTemplate.ValueType = typeof(String);

и

cell.ValueType = typeof(String);

Однако, похоже, ничего не изменилось.Как я могу остановить неявное преобразование в int?

1 Ответ

0 голосов
/ 11 марта 2019

Мне удалось решить проблему самостоятельно - хотя «решить» немного относительно. Я все еще интересуюсь возможностью перезаписи фактического столбца, но мое решение - просто создать новый столбец.

  1. Добавьте новый несвязанный столбец в DataGridView с именем «FieldName». В моем примере индекс столбца 0 - это столбец FieldID, а индекс столбца 1 - это новый столбец FieldName, который в настоящее время пуст.
  2. Изменение содержимого индекса столбца 1 на основе содержимого индекса столбца 0 с помощью поиска в словаре
  3. Скрыть индекс столбца 0 (делать это в свойствах столбца, GUI у меня не работал, поэтому я сделал это в коде)

Соответствующий код:

foreach(DataGridViewRow row in dataGridView.Rows) {
    for(int i = 0; i < row.Cells.Count; i++) {
        int fieldID = Convert.ToInt32(row.Cells[0].Value);
        String fieldName = dictionary[fieldID];
        row.Cells[1].Value = fieldName;
    }
}
FieldColumn.Visible = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...