MukulMohal Ответов: 2

Отображение данных в datagridview из базы данных вместе с combobox


Привет, я пытаюсь заполнить данные в datagridview, который также содержит datagridviewcombobox, и я использовал хранимую процедуру для извлечения данных из хранимой процедуры.

Мой код таков

void Show_customer_bills_Details()
        {
            connection();
            SqlCommand cmd = new SqlCommand("Bill_Search_Details", con);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@invno", editdetails);

            SqlDataAdapter adp = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            adp.Fill(dt);
            DataRow dr = dt.NewRow();
            //con.Close();
            int count = dt.Rows.Count;

            for (int i=0;i<count;i++)
 {
="" dt.importrow(dr);
="" grdsearch.rows[i].cells["item_description"].value="dt.Rows[i]["Item_Description"].ToString();
" grdsearch.rows[i].cells["hsn_code"].value="dt.Rows[i]["HSN_Code"].ToString();
" grdsearch.rows[i].cells["quantity"].value="dt.Rows[i]["Quantity"].ToString();
" grdsearch.rows[i].cells["converstion_type"].value="dt.Rows[i]["Converstion_Type"].ToString();
" grdsearch.rows[i].cells["rate"].value="dt.Rows[i]["Rate"].ToString();
" grdsearch.rows[i].cells["amount"].value="dt.Rows[i]["Amount"].ToString();
" grdsearch.rows[i].cells["unit_type"].value="dt.Rows[i]["Unit_Type"].ToString();
" }<="" b="">


И Я ПОЛУЧАЮ ОШИБКУ

'Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index'


Что я уже пробовал:

ранее я использовал
dt.Rows.Add(dr);

я получил ошибку
'This row already belongs to this table.'

тогда я попробовал
dt.ImportRow(dr);

я получил ошибку :
'Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index'


пожалуйста, помогите мне...

2 Ответов

Рейтинг:
9

MukulMohal

я смог заполнить datagridview, который состоит из 2 combobox и 4 textbox.

grdsearch.Источник данных = null;
grdsearch.Rows.Четкий();
grdsearch.Освежить();

соединение();
SqlCommand cmd = new SqlCommand("Bill_Search_Details", con);
УМК.CommandType = CommandType.Хранимая процедура;

cmd.параметры.AddWithValue("@invno", editdetails);

SqlDataAdapter adp = новый SqlDataAdapter(cmd);
DataTable dt = новый DataTable();
АДП.Заполнить(ДТ);
Доктор строкаданных = ДТ.Невров();
//con.Close();
граф инт = ДТ.Строк.Рассчитывать;

//grdsearch.Источник данных = dt;

for (int i = 0; i < count; i++)
{
//ДТ.Строк.Добавить(д-р[я]);
DataGridViewRow row = grdsearch.Строк[grdsearch.Строк.Добавить()];
grdsearch.Строки[i].Ячейки["Item_Description"].Value = dt.Rows[i]["Item_Description"].Метод toString();
grdsearch.Строки[i].Ячейки["HSN_Code"].Value = dt.Rows[i]["HSN_Code"].Метод toString();
grdsearch.Строки[i].Ячейки["Количество"].Значение = ДТ.Строки[я]["количество"].Метод toString();
grdsearch.Строки[i].Ячейки["Converstion_Type"].Value = dt.Rows[i]["Converstion_Type"].Метод toString();
grdsearch.Строки[i].Ячейки["Курс"].Значение = ДТ.Строки[Я]["курс"].Метод toString();
grdsearch.Строки[i].Ячейки["Сумма"].Значение = ДТ.Строки[Я]["сумма"].Метод toString();
grdsearch.Строки[i].Ячейки["Unit_Type"].Value = dt.Rows[i]["Unit_Type"].Метод toString();
}


}


Richard MacCutchan

Было бы намного лучше (и проще), если бы вы использовали привязку данных, а не добавляли все вручную.

MukulMohal

не могли бы вы подсказать мне, как это сделать?

Richard MacCutchan

Google для "привязки данных C#", и вы найдете всю необходимую информацию.

MukulMohal

я пробовал также с помощью

grdsearch.источник данных=ДТ;

и тоже попробовал

grdsearch.источник данных=bindingsource1;

боте дал мне пустые строки только они не отображают никаких данных в datagridview

Richard MacCutchan

Тогда вы, должно быть, сделали что-то не так. Смотреть на Практическое руководство.Свойство DataSource (Системы.Окна.Формы) | Microsoft Docs[^] для примера кода.

Рейтинг:
2

Richard MacCutchan

adp.Fill(dt);

Вы должны проверить возвращаемое значение от вызова до Fill, чтобы увидеть, были ли возвращены какие-либо строки.


MukulMohal

да, я проверил, там было две строки, которые были возвращены

Richard MacCutchan

Затем вам нужно использовать свой отладчик, чтобы точно увидеть, где происходит ошибка и какое значение индекса находится вне диапазона.

MukulMohal

Я смог получить данные из базы данных с помощью

for (int i = 0; i < count; i++)
{
//ДТ.Строк.Добавить(д-р[я]);
DataGridViewRow row = grdsearch.Строк[grdsearch.Строк.Добавить()];
grdsearch.Строки[i].Ячейки["Item_Description"].Value = dt.Rows[i]["Item_Description"].Метод toString();
grdsearch.Строки[i].Ячейки["HSN_Code"].Value = dt.Rows[i]["HSN_Code"].Метод toString();
grdsearch.Строки[i].Ячейки["Количество"].Значение = ДТ.Строки[я]["количество"].Метод toString();
grdsearch.Строки[i].Ячейки["Converstion_Type"].Value = dt.Rows[i]["Converstion_Type"].Метод toString();
grdsearch.Строки[i].Ячейки["Курс"].Значение = ДТ.Строки[Я]["курс"].Метод toString();
grdsearch.Строки[i].Ячейки["Сумма"].Значение = ДТ.Строки[Я]["сумма"].Метод toString();
grdsearch.Строки[i].Ячейки["Unit_Type"].Value = dt.Rows[i]["Unit_Type"].Метод toString();
}

теперь в этом есть проблема что когда я когда либо заполняю сетку новыми данными она сохраняет предыдущие данные и увеличивает строку снова и снова plz помогите мне правильно получить данные

Richard MacCutchan

Перед началом добавления данных необходимо удалить существующие строки.