Member 13153537 Ответов: 1

Как показать данные чека в строке datagridview на основе выбранного значения из выпадающего списка имя банка


У меня есть две таблицы счет, указанный в разделе а таблицы chequedetails обеих таблицах есть идентификатор банка.Я создал foreignkey в столбце bankid.Я вставил несколько записей в обе таблицы.Теперь у меня есть выпадающий список столбце bankname,accountno accounttype, начиная текстовое поле и поле со списком.И одним элементом управления datagridview.dridview это заполнить из таблицы chequedetails.
Теперь, если я выберу bankname в banknamecombobox accountno и account должен отображаться нормально.Теперь я хочу, чтобы на основе banknameselectedid показывают соответствующие строки показать в datagridview
который исходит из таблицы chequedetails.
Пожалуйста, помогите мне в этом.
Заранее спасибо.

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

<pre>   private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
            string abc = comboBox1.SelectedValue.ToString();
            if (abc != "[select, select]" && abc != "select")
            {
                SqlConnection con = new SqlConnection(connection);
                con.Open();
                SqlCommand cmd = new SqlCommand("SELECT [bank_Id],
           [bank_Accountno],bank_Accountype FROM bankdetails where 
             bank_Id=@bank_Id",con);
                cmd.Parameters.AddWithValue("@bank_Id", 
                 comboBox1.SelectedValue.ToString());
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                if (dt.Rows.Count > 0)
                {
                    txtAcntno.Text = dt.Rows[0]["bank_Accountno"].ToString();
                    cmbAcntype.Text = dt.Rows[0]["bank_Accountype"].ToString().Trim();
                    LoadDataGridView();
                }
            }
            else if (comboBox1.SelectedIndex == 0)
            {
                txtAcntno.Text = "";
                cmbAcntype.SelectedIndex = 0;
            }
        }



private void LoadDataGridView()
       {

       SqlConnection con = new SqlConnection(connection);
       SqlCommand cmd = new SqlCommand(" SELECT bank_Id,row_number() over(order by [bank_Id]) as SlNo,[bank_Chqstartno],[bank_Chqendno],case bank_Chqlvscount when 100 then 2 when 50 then 1 when 10 then 0 end as noofcheques ,bank_Chqlvscount,bank_Stat FROM [dbo].bankcheques where bank_Id=@bank_Id order by SlNo desc ", con);
       try
       {
           con.Open();
           SqlDataAdapter da = new SqlDataAdapter();
           da.SelectCommand = cmd;
           DataTable dt = new DataTable();
           da.Fill(dt);
           DataGridViewComboBoxColumn cmb = dgvwChqs.Columns["noofcheques"] as DataGridViewComboBoxColumn;
           cmb.DataSource = dt;
           cmb.DisplayMember = "bank_Chqlvscount";
           cmb.ValueMember = "bank_Id";
           cmb.HeaderText = "No. of Cheques";
           dgvwChqs.DataSource = dt;
           con.Close();
       }
       catch (Exception ex)
       {
           MessageBox.Show(ex.Message);
       }
   }

CHill60

Просто введите предложение WHERE в SQL cmd в LoadDataGridView. Вы уже показали, что умеете это делать. При необходимости вы можете передать выбранный банк в качестве параметра этой функции.

Member 13153537

банкноты Колум не было в чековом столе.Не могли бы вы подсказать мне, пожалуйста, как это сделать?
Заранее спасибо.

CHill60

В соответствии с вашим selectedindex измененным кодом

cmd.Parameters.AddWithValue("@bank_Id", 
                 comboBox1.SelectedValue.ToString());
у вас уже есть bankid

CHill60

Если вы используете  Ответить  кнопка Я буду уведомлен когда вы ответите

Member 13153537

Когда я использовал этот код по крайней мере в первый раз, я получаю правильный ответ, а затем получил ошибку:"ССЫЛКА на объект не установлена на экземпляр объекта".
Команда sqlcommand cmd и = новая команда sqlcommand(" выберите bank_Id,функции row_number() над(приказ [bank_Id]) как сльно,[bank_Chqstartno],[bank_Chqendno],bank_Chqlvscount случае, если 100, то 2, Если 50 то 1, Когда 10 тогда 0 конец как noofcheques ,bank_Chqlvscount,bank_Stat От на [dbo].bankcheques где bank_Id=@приказ bank_Id по убыванию сльно ", кон);

УМК.Параметры.AddWithValue ("@bank_Id",
поле combobox1.SelectedValue.Метод toString());

Member 13153537

Большое спасибо.Это прекрасно работает для меня в первый раз. когда я меняю значение combobox во второй раз, я получаю ошибку "ССЫЛКА на объект не установлена на экземпляр объекта".

CHill60

Вам нужно отладить и найти, какой объект является нулевым. Мы не можем видеть весь ваш проект

Member 13153537

хорошо спасибо

1 Ответов

Рейтинг:
10

CHill60

Перечитывая ваш вопрос еще раз, я предполагаю, что на самом деле у вас есть название банка в качестве selectedvalue в ComboBox, а не bankid.

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

SELECT BC.bank_Id,row_number() over(order by [bank_Id]) as SlNo,[bank_Chqstartno],[bank_Chqendno],
	case bank_Chqlvscount when 100 then 2 when 50 then 1 when 10 then 0 end as noofcheques ,
	bank_Chqlvscount,bank_Stat 
FROM [dbo].bankcheques BC
INNER JOIN [dbo].bankdetails BD ON BC.bank_Id = BD.bank_Id
where bank_name=@bank_name 
order by SlNo desc 


Member 13153537

После использования вышеприведенного запроса.я получаю пустой набор данных.

Member 13153537

После использования вышеприведенного запроса.я получаю пустой набор данных.

CHill60

Каково значение selectedvalue в поле со списком и есть ли у вас банк с таким именем?

Member 13153537

на основе bank_Id. мы передаем столбец bank_Name.

CHill60

Это не ответ на мои вопросы! Если у вас уже есть bank_id, то просто найдите его

Member 13153537

Это место, где я получаю исключение нулевой ссылки. В первый раз он работает нормально.Но во второй раз, когда я выбираю другое значение из выпадающего списка.Я получаю эту ошибку.Как это исправить.
DataGridViewComboBoxColumn cmb = dgvwChqs.Столбцы ["noofcheques"] как DataGridViewComboBoxColumn;
УМК.Источник данных = ДТ;
УМК.DisplayMember = "bank_Chqlvscount";
УМК.ValueMember = "bank_Id";
СРК.HeaderText = " количество чеков";
dgvwChqs.Источник данных = ДТ;

CHill60

Какая строка дает исключение?

Member 13153537

Для заполнения combobox я использую приведенный ниже код.

частный недействительными FillBankName()
{


//Объекта datarow др;
SqlConnection con = новый SqlConnection(соединение);
против.Открыть();
Команда sqlcommand cmd и = новая команда sqlcommand("выберите bank_Id,bank_Name от счет, указанный в разделе" кон);
SqlDataAdapter sda = новый SqlDataAdapter(cmd);

DataTable dt = новый DataTable();
ПДД.Заполнить(ДТ);
Словарь< string, string & gt; test = новый словарь< string, string>();
тест.Добавить("выбор", "выбор");

for (int i = 0; i < dt.Rows.Граф; i++)
{
тест.Добавить(ДТ.Строки[я]["bank_Name"].ToString (), dt.Rows[i]["bank_Id"].Метод toString());
}

comboBox1. DataSource = new BindingSource(test, null);
comboBox1. ValueMember = " значение";
comboBox1. DisplayMember = " ключ";
comboBox1. привязки данных.Метод toString();
против.Закрывать();
}