Atul Rokade Ответов: 1

Как получить значение в datagridview с помощью автозаполнения текста


Я создаю одно приложение, где medicine_name-это текст автозаполнения, основываясь на этом выборе, я хочу заполнить Expiry_Date, но всякий раз, когда я запускаю код его данный мне индекс был за пределами исключения массива извлечь код, который я написал на событие dataGridView1_CellEndEdit,im через МС доступ к БД я не знаю, где здесь я не прав им вставить мой код

структура таблицы такова :
Med_id Счетчик
Памятка Medicine_Name
Памятка Number_of_tab
Drawer_No Памятка
Dealer_Name Текст
В Наличии Количество
Expiry_Date Дата/Время (формат: shortDatetime)


структура datagridview
Количество Medicine_Name (его текстовая база автозаполнения на этом я хочу показать Expiry_Date), Medicine_Cost, Manufacturer_Name,Batch_No,срок годности , Рупии

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

private void dataGridView1_CellEndEdit_1(object sender, DataGridViewCellEventArgs e)
        {

 string connectionString = null;
            connectionString = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;
            con.ConnectionString = connectionString;


            string medicinename = Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells["Medicine_name"].Value);
            DateTime Expiry_Date = Convert.ToDateTime (dataGridView1.Rows[e.RowIndex].Cells["Expiry_Date"].Value);

            con.Open();
            cmd = new OleDbCommand("select Expiry_Date from Medicine_Available_Detail where Medicine_Name='" + medicinename + "'", con);
            OleDbDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                Expiry_Date = Convert.ToDateTime (dr.GetValue(5));// exeception coming on this line
            }
            con.Close();


        }

[no name]

Простой. Вы получаете данные для одного столбца и пытаетесь получить доступ к данным в вашем считывателе данных, которые не существуют (у вас есть только 1 столбец информации, а не 5).

Atul Rokade

я внес изменения в эту строку Expiry_Date = Convert.ToDateTime(dr ["Expiry_Date"]); но все равно значение не извлекается в базе данных : (, пожалуйста, скажите мне, на какое событие я должен поместить код, чтобы я мог получить значение

[no name]

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

Atul Rokade

я перепробовал все, но потерпел неудачу

[no name]

Поскольку никто из нас не знает, что это значит,что вы ожидаете от нас услышать? Мы не можем запустить или отладить ваш код для вас. Вам предстоит научиться запускать свой код в отладчике и находить ошибку.

Atul Rokade

@Richard sir: можете ли вы дать мне решение по этому вопросу?

Richard Deeming

Просто - не используйте конкатенацию строк. Вместо этого используйте параметр:

cmd = new OleDbCommand("select Expiry_Date from Medicine_Available_Detail where Medicine_Name = @Medicine_Name", con);
cmd.Parameters.AddWithValue("@Medicine_Name", medicinename);

Atul Rokade

Сэр, я написал код на datagridview cellEndEdit, но все еще не получаю вывода, мой запрос medicine_name-это автозаполнение текста в базе datagridview на этом Expiry_Date должен быть заполнен вот мой модифицированный код


строка connectionString = null;
connectionString = ConfigurationManager.ConnectionStrings ["AccessConnectionString"].Параметр connectionString;
против.Параметр connectionString = параметр connectionString;


строка medicinename = Convert.Метод toString(dataGridView1.Ряды[электронный.Параметр rowindex].Cells ["Medicine_name"]. Value);
DateTime Expiry_Date = Конвертировать.Объект todatetime(dataGridView1.Ряды[электронный.Параметр rowindex].Ячейки ["Expiry_Date"]. Value);

против.Открыть();
команду cmd = новый объект oledbcommand("Выберите это значение, как это значение из Medicine_Available_Detail где Medicine_Name=@Medicine_Name",кон);
УМК.Параметры.AddWithValue ("@Medicine_Name", medicinename);
OleDbDataReader dr = cmd.Метода executereader();
в то время как (dr. Read())
{
Expiry_Date = Конвертировать.Объект todatetime(д-р["это значение"]);
}
против.Закрывать();


Richard Deeming

Если вы не получаете никаких результатов, это означает, что в вашей базе данных нет соответствующих записей.

Atul Rokade

Сэр данные есть, я проверил, когда я выбираю Medicine_Name : Xedo который это значение 10/04/2018(ДД/ММ/гггг)

1 Ответов

Рейтинг:
2

Atul Rokade

вот у меня есть решение

string connectionString = null;
            connectionString = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;
            con.ConnectionString = connectionString;


            string medicinename = Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells["Medicine_name"].Value);
            DateTime Expiry_Date=new DateTime (); 

            con.Open();
            cmd = new OleDbCommand("select Expiry_Date as Expiry_Date from Medicine_Available_Detail where Medicine_Name=@Medicine_Name",con);
            cmd.Parameters.AddWithValue("@Medicine_Name",medicinename);
            OleDbDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                Expiry_Date = Convert.ToDateTime(dr["Expiry_Date"]);
                
            }
            dataGridView1.Rows[e.RowIndex].Cells["Expiry_Date"].Value = Expiry_Date; 
            con.Close();