В проекте C# WinForms, который подключается к базе данных PostgreSQL с использованием инфраструктуры Npg sql, я перебираю таблицу данных DGV и получаю идентификаторы записей для строк, в которых есть ячейка, соответствующая строке поиска.
Вот код, который делает это:
string searchText = txtSearchCatsGrid.Text.ToUpper();
int[] idArray = new int[] { };
DataTable dt = ((DataTable)dgvCategories.DataSource);
string cellValue;
int rowIndex;
int columnIndex;
int arrayIndex = 0;
for (rowIndex = 0; rowIndex <= dt.Rows.Count - 1; rowIndex++)
{
for (columnIndex = 0; columnIndex <= dt.Columns.Count - 1; columnIndex++)
{
cellValue = dt.Rows[rowIndex][columnIndex].ToString();
if (searchText == cellValue.ToUpper())
{
idArray[arrayIndex] = dt.Rows[rowIndex][0];
arrayIndex++;
}
}
if (!string.IsNullOrEmpty(idToAddToList) && !tempIdList.Contains(idToAddToList)) tempIdList += idToAddToList + ",";
}
Мне нужно передать массив целых чисел (список идентификаторов записей) в функцию, которая запрашивает базу данных PostgreSQL, используя это перечислять в качестве фильтра в предложении WHERE.
Моя проблема в том, что я не могу понять, как добавить идентификаторы в массив, idArray
.
Поскольку код сейчас, dt.Rows[rowIndex][0]
имеет красную волнистую линию подчеркивания, которая гласит: «Не удается неявно преобразовать тип« объект »в« int »(Вы пропустили приведение?)»
«Вы пропустили приведение» побудило меня попробовать приведите dt.Rows[rowIndex][0]
к int, используя (int)dt.Rows[rowIndex][0]
, который скомпилирован и запущен, но когда я запускаю его, я получаю исключение "Индекс вне диапазона" в (int)dt.Rows[rowIndex][0]
, когда я иду мимо этого (используя F11). Хотя массивы начинаются с нуля, я попытался инициализировать arrayIndex как 1, но я получил то же исключение «Индекс вне диапазона».
Я не могу использовать список <>, как PostgreSQL / Npg sql не могу с этим работать.