saimanisha Ответов: 1

Как включить текстовое поле в элементе управления datagridview при нажатии флажка в данной строке ?


нажав на флажок, он должен включить той же строке следующего столбца из текстового поля из элемента управления datagridview .но вот его включение следующей строке текстового поля.как я могу ограничить его включить только той же строке текстового поля.с помощью кода C#

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

public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
           dataGridView1.Columns["AMOUNT"].Visible = false;

           //  LoadSerial();

       }
       /*   private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
          {
              LoadSerial();
          }*/

       // int COUNTER = 0;
       private void button1_Click(object sender, EventArgs e)
       {


           //ADDDATA(textBox2.Text, textBox1.Text);
           //string EMINITIESNAME = textBox2.Text;
           //string DESCRIPTION = textBox1.Text;
           int row = 0;
           dataGridView1.Rows.Add();
           row = dataGridView1.Rows.Count - 2;
           dataGridView1["AMENITIESNAME", row].Value = textBox2.Text;
           dataGridView1["DESCRIPTION", row].Value = textBox1.Text;
           LoadSerial();

       }
       private void LoadSerial()
       {
           int i = 1;
           foreach (DataGridViewRow row in dataGridView1.Rows)
           {
               row.Cells["ID"].Value = i; i++;
           }

       }


       public void ADDDATA(string AMENITIESNAME, string DESCRIPTION)
       {
           int row = 0;
           dataGridView1.Rows.Add();
           row = dataGridView1.Rows.Count - 2;
           dataGridView1["AMENITIESNAME", row].Value = textBox2.Text;
           dataGridView1["DESCRIPTION", row].Value = textBox1.Text;


       }




       private void Form1_Load(object sender, EventArgs e)
       {

       }

       private void textBox1_TextChanged(object sender, EventArgs e)
       {

       }



       private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
       {


           foreach (DataGridViewRow dataGridRow in dataGridView1.Rows)
           {
               if (dataGridRow.Cells["SELECT"].Value != null && (bool)dataGridRow.Cells["SELECT"].Value)
               {

                   dataGridView1.Columns["AMOUNT"].Visible = true;


               }

               else if (dataGridRow.Cells["SELECT"].Value == null)
               {
                   // Unchecked
               }

           }
       }

Afzaal Ahmad Zeeshan

Итак, где же находится обработчик событий для этого флажка?

saimanisha

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

1 Ответов

Рейтинг:
6

Zunayed Shahriar

Сначала в свойстве DataGridView измените значение "AllowUserToAddRows" с "True" на " False"

Измененные Фрагменты:

Менять "строке = dataGridView1.Строк.Count -2; "to" row = dataGridView1. Rows.Граф -1; " в ваших методах.

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                var curCell = dataGridView1.CurrentCell;
                if (curCell.Value == null || (bool)curCell.Value == false)
                {
                    curCell.Value = true;
                }
                else
                {
                    curCell.Value = false;
                }

                if ((bool)curCell.Value)
                {

                    dataGridView1.Columns["AMOUNT"].Visible = true;
                }
                else
                {
                    dataGridView1.Columns["AMOUNT"].Visible = false;
                }
            }
        }


Если это работает, пожалуйста, отметьте это как решение.


saimanisha

текстовое поле столбца сумма не должно быть видно до тех пор ,пока я не нажму на флажок .ваш ответ работает частично, как его правильный, но в соответствии с моим требованием, когда я нажимаю на флажок столбца 4 row1, текстовое поле столбца 5 и row1 должно быть видно.

saimanisha

я получаю проблему, которая возникает во второй раз, когда я добавляю данные в datagridview, не нажимая на флажок его показывать количество столбцов текстового поля в datagridview.как преодолеть эту проблему

Zunayed Shahriar

новое изменение

новый метод:
частный недействительными ResetSelection()
{
по каждому элементу (ячейки datagridviewrow строку в dataGridView1.Строк)
{
ряд.Ячейки ["SELECT"]. Value = false;
}
}

Измененные Методы:

частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{


//ADDDATA(textBox2. Text, textBox1.Text);
//string EMINITIESNAME = textBox2. Text;
//string DESCRIPTION = textBox1. Text;
int row = 0;
dataGridView1.Строк.Добавить();
строки = dataGridView1.Строк.Считай -1;
dataGridView1 ["AMENITIESNAME", row]. Value = textBox2. Text;
dataGridView1 ["описание", строка]. Value = textBox1. Text;
dataGridView1.Колонки["количество"].Видна = ложь;
LoadSerial();
ResetSelection();
}

частная dataGridView1_CellContentClick недействительным(объект отправителя, DataGridViewCellEventArgs е)
{
Система.Нарезание резьбы.Нить.Сон(200);
если (электронная.Параметр rowindex &ГТ; -1 &амп;&амп; dataGridView1.CurrentCell == dataGridView1.Ряды[электронный.Параметр rowindex].Ячейки ["SELECT"])
{
ResetSelection();
если (dataGridView1.Колонки["количество"].Видно == ложь)
{
dataGridView1.CurrentCell.Значение = ИСТИНА;
dataGridView1.Колонки["количество"].Видимое = истинное;
}
ещё
{
dataGridView1.Колонки["количество"].Видна = ложь;
dataGridView1.CurrentCell.Значение = ложь;
}
}
}

Попробовать это. Если возникнут какие-то проблемы, дайте мне знать.

saimanisha

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

Zunayed Shahriar

Вы просто не можете скрыть клетку. Вот что вы можете сделать.

Полный новый источник:

использование системы;
использование системы.Коллекции.Общий;
использование системы.ComponentModel;
используя системы.Сведения;
использование системы.Рисование;
использование System. Linq;
используя системы.Текст;
использование системы.Нарезание резьбы.Задачи;
использование системы.Окна.Формы;

пространство имен STS_RAM
{
общественности частичного класс form1 : форма
{
открытый form1()
{
метод InitializeComponent();

// LoadSerial();

}
/* частная dataGridView1_CellEndEdit недействительным(объект отправителя, DataGridViewCellEventArgs е)
{
LoadSerial();
}*/

// int счетчик = 0;
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{


//ADDDATA(textBox2. Text, textBox1.Text);
//string EMINITIESNAME = textBox2. Text;
//string DESCRIPTION = textBox1. Text;
int row = 0;
dataGridView1.Строк.Добавить();
строки = dataGridView1.Строк.Считай -1;
dataGridView1 ["AMENITIESNAME", row]. Value = textBox2. Text;
dataGridView1 ["описание", строка]. Value = textBox1. Text;
dataGridView1 ["сумма", строка].Толькочтение = истина;
dataGridView1 ["сумма", строка].Стиль.BackColor = Цвет.Черный;
LoadSerial();
}
частная пустота LoadSerial()
{
int i = 1;
по каждому элементу (ячейки datagridviewrow строку в dataGridView1.Строк)
{
ряд.Ячейки ["ID"]. Value = i; i++;
}

}


public void ADDDATA(string AMENITIESNAME, string DESCRIPTION)
{
int row = 0;
dataGridView1.Строк.Добавить();
строки = dataGridView1.Строк.Считай -1;
dataGridView1 ["AMENITIESNAME", row]. Value = textBox2. Text;
dataGridView1 ["описание", строка]. Value = textBox1. Text;
}




частный недействительными методе form1_load(объект отправителя, EventArgs в электронной)
{

}

частный недействительными textBox1_TextChanged(объект отправителя, EventArgs в электронной)
{

}



частная dataGridView1_CellContentClick недействительным(объект отправителя, DataGridViewCellEventArgs е)
{
Система.Нарезание резьбы.Нить.Сон(200);
ВАР amountCell = dataGridView1.Ряды[электронный.Параметр rowindex].Ячейки ["количество"];
если (электронная.Параметр rowindex &ГТ; -1 &амп;&амп; dataGridView1.CurrentCell == dataGridView1.Ряды[электронный.Параметр rowindex].Ячейки ["SELECT"])
{
если (amountCell.Только для чтения == правда)
{
dataGridView1.CurrentCell.Значение = ИСТИНА;
amountCell.Толькочтение = ложь;
сумма в ячейке.Стиль.BackColor = Цвет.Белый;
}
ещё
{
dataGridView1.CurrentCell.Значение = ложь;
amountCell.Толькочтение = истина;
сумма в ячейке.Стиль.BackColor = Цвет.Черный;
}
}
}
}
}

saimanisha

ЭТО СРАБОТАЛО, СПАСИБО.. НО КАК Я МОГУ ПРЕКРАТИТЬ РЕДАКТИРОВАНИЕ ДАЖЕ ПОСЛЕ ТОГО, КАК СДЕЛАЛ ЕГО ЛОЖНЫМ..ЕГО РЕДАКТИРУЮТ

saimanisha

Проблема в том, что когда я нажимаю на флажок, он не дает возможности редактировать..но когда я снимаю его, он позволяет ввести сумму..где мы должны изменить код?

Zunayed Shahriar

Не нажимайте слишком быстро.
изменить систему.Нарезание резьбы.Нить.Sleep(200); система "to".Нарезание резьбы.Нить.Сон (300); " чтобы поправиться.

saimanisha

нет, яар, это не работает.когда я нажимаю на флажок, он должен разрешить текст в текстовом поле, иначе он не должен...но это делается в обратном порядке..когда я снимаю галочку с его разрешения редактировать..

Zunayed Shahriar

Новый полный класс:


общественности частичного класс form1 : форма
{
DataGridViewCell lastCell = null;
открытый form1()
{
метод InitializeComponent();

// LoadSerial();

}
/* частная dataGridView1_CellEndEdit недействительным(объект отправителя, DataGridViewCellEventArgs е)
{
LoadSerial();
}*/

// int счетчик = 0;
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{


//ADDDATA(textBox2. Text, textBox1.Text);
//string EMINITIESNAME = textBox2. Text;
//string DESCRIPTION = textBox1. Text;
int row = 0;
dataGridView1.Строк.Добавить();
строки = dataGridView1.Строк.Считай -1;
dataGridView1 ["AMENITIESNAME", row]. Value = textBox2. Text;
dataGridView1 ["описание", строка]. Value = textBox1. Text;
dataGridView1 ["SELECT", row]. Value = false;
dataGridView1 ["сумма", строка].Толькочтение = истина;
dataGridView1 ["сумма", строка].Стиль.BackColor = Цвет.Черный;
LoadSerial();
}
частная пустота LoadSerial()
{
int i = 1;
по каждому элементу (ячейки datagridviewrow строку в dataGridView1.Строк)
{
ряд.Ячейки ["ID"]. Value = i; i++;
}

}


public void ADDDATA(string AMENITIESNAME, string DESCRIPTION)
{
int row = 0;
dataGridView1.Строк.Добавить();
строки = dataGridView1.Строк.Считай -1;
dataGridView1 ["AMENITIESNAME", row]. Value = textBox2. Text;
dataGridView1 ["описание", строка]. Value = textBox1. Text;
}




частный недействительными методе form1_load(объект отправителя, EventArgs в электронной)
{

}

частный недействительными textBox1_TextChanged(объект отправителя, EventArgs в электронной)
{

}



частная dataGridView1_CellContentClick недействительным(объект отправителя, DataGridViewCellEventArgs е)
{
if (lastCell != null)
{
ВАР lastAmtCell = dataGridView1.Строк[lastCell.Параметр rowindex].Ячейки ["количество"];
если (lastAmtCell.Только для чтения == правда)
{
lastCell.Значение = ложь;
}
ещё
{
lastCell.Значение = ИСТИНА;
}
}
ВАР amountCell = dataGridView1.Ряды[электронный.Параметр rowindex].Ячейки ["количество"];
если (электронная.Параметр rowindex &ГТ; -1 &амп;&амп; dataGridView1.CurrentCell == dataGridView1.Ряды[электронный.Параметр rowindex].Ячейки ["SELECT"])
{
если (amountCell.Только для чтения == правда)
{
dataGridView1.CurrentCell.Значение = ИСТИНА;
amountCell.Толькочтение = ложь;
сумма в ячейке.Стиль.BackColor = Цвет.Белый;
}
ещё
{
dataGridView1.CurrentCell.Значение = ложь;
amountCell.Толькочтение = истина;
сумма в ячейке.Стиль.BackColor = Цвет.Черный;
}
lastCell = dataGridView1. CurrentCell;
}
}
}

saimanisha

большое вам спасибо,он работает.

saimanisha

у меня есть сомнения, как отправить эти данные gridview в sql..здесь ниже код, но перед вводом суммы в ячейку суммы и после нажатия на флажок он подключается к sql..здесь я хочу, чтобы пользователь ввел сумму, а затем он должен проверить, пуста ячейка суммы или нет..если не пуста, то он должен вставить в sql.

ВАР amountCell = dataGridView1.Ряды[электронный.Параметр rowindex].Ячейки ["количество"];
если (электронная.Параметр rowindex &ГТ; -1 &амп;&амп; dataGridView1.CurrentCell == dataGridView1.Ряды[электронный.Параметр rowindex].Ячейки ["флажок"])
{

если (amountCell.Только для чтения == правда)

{
amountCell.Толькочтение = ложь;
сумма в ячейке.Стиль.BackColor = Цвет.Белый;
dataGridView1.Колонки["количество"].Видимое = истинное;
// TimeSpan ts = TimeSpan.Фроммиллисекунды(150000000);
// bool flag = false;
}


по каждому элементу (ячейки datagridviewrow строку в dataGridView1.Строк)
{
{
если (преобразовать.Метод toString(строки.Ячейки["сумма"].Значение) == строка.Пустой)

{
Ящик для сообщений.Показать ("пожалуйста, введите сумму"); вернуть;

}
ещё
{

// КОД ДЛЯ ПОДКЛЮЧЕНИЯ SQL И СТРОИНГ ДАННЫЕ В БД
Объект sqlconnection кон = новое sqlconnection(@"источник данных=рабочий стол-QDGHD7L;начальный каталог=банкетный зал ;пароль=секрет;Комплексная безопасность=истина;");
против.Открыть();
for (int i = 0; i < dataGridView1.Rows.Граф; i++)
{
строки StrQuery = @"вставить в значениях услуги (@ИД@AMENITIESNAME,@описание, флажок@,@сумма)";
                                SqlCommand CMD = new SqlCommand(StrQuery, con);
                                УМК.Параметры.AddWithValue ("@ID", dataGridView1.Rows[i].Ячейки[0]. Значение);
                                УМК.Параметры.AddWithValue ("@AMENITIESNAME", dataGridView1.Rows[i].Ячейки[1]. Значение);
                                УМК.Параметры.AddWithValue ("@DESCRIPTION", dataGridView1.Rows[i].Ячейки[2]. Значение);
                                УМК.Параметры.AddWithValue ("@CHECKBOX", dataGridView1. Rows[i].Ячейки[3]. Значение);
                                УМК.Параметры.AddWithValue ("@AMOUNT", dataGridView1. Rows[i].Ячейки[4]. Значение);
   
                                УМК.Метод executenonquery();
}
}
ещё
{
dataGridView1.Ряды[электронный.Параметр rowindex].Ячейки ["сумма"]. ReadOnly = true;
сумма в ячейке.Стиль.BackColor = Цвет.Серый;
dataGridView1.Колонки["количество"].Видимое = истинное;

}
lastCell = dataGridView1. CurrentCell;
}
}
}
}