ссылка на столбец dataGridView и вложенные операторы if с событием CellContentDoubleClick c # - PullRequest
0 голосов
/ 01 марта 2019

Привет, поэтому я вижу много сообщений о ссылках на ячейки в DGV и вложенных операторах if.Сообщение заставило меня так далеко, я почти там или, может быть, нет ... Я надеюсь на некоторую помощь и открыт для предложений.

очень просто, мне нужно иметь возможность дважды щелкнуть по определенной ячейке в dgv, при двойном щелчке по ячейке, если эта ячейка находится в определенном столбце, она применяет 1 или 0 к соответствующему столбцу.

Итак, при двойном нажатии на ячейку в столбце 2 применяется цифра один или ноль в зависимости от той же строки, но столбца 5.

so,column 2 relates to 5
      6 relates to 9
      10 relates to 13
      14 relates to 17
      18 relates to 21
      22 relates to 25

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

        private void dataGridViewAcorn_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
    {

        commandBuilder = new SqlCommandBuilder(dataAdapter);
        dataAdapter.UpdateCommand = commandBuilder.GetUpdateCommand();//get the update command



        string HW_A = dataGridViewAcorn.CurrentRow.Cells[5].Value.ToString();
        string Crwn_A = dataGridViewAcorn.CurrentRow.Cells[9].Value.ToString();
        string HB_A = dataGridViewAcorn.CurrentRow.Cells[13].Value.ToString();
        string OV_A = dataGridViewAcorn.CurrentRow.Cells[17].Value.ToString();
        string Acorn_A = dataGridViewAcorn.CurrentRow.Cells[21].Value.ToString();
        string Brn_A = dataGridViewAcorn.CurrentRow.Cells[25].Value.ToString();

        int columnIndex = dataGridViewAcorn.CurrentCell.ColumnIndex;


        if (columnIndex == 2)
        {
            if (HW_A == ("1"))

            {
                dataGridViewAcorn.CurrentRow.Cells[5].Value = 0;

            }
            else HW_A = ("0");

            {
                dataGridViewAcorn.CurrentRow.Cells[5].Value = 1;

            }


        }



        /*
        System.Text.StringBuilder messageBoxCS = new System.Text.StringBuilder();
        messageBoxCS.AppendFormat("{0} = {1}", "ColumnIndex", e.ColumnIndex);
        messageBoxCS.AppendLine();
        messageBoxCS.AppendFormat("{0} = {1}", "RowIndex", e.RowIndex);
        messageBoxCS.AppendLine();
        MessageBox.Show(messageBoxCS.ToString(), "CellConentDoubleClick Event");

        */

        dataGridViewAcorn.DataSource = bindingSourceAcorn;
        bindingSourceAcorn.EndEdit();// updates table in memory 
        dataAdapter.Update(table);//actually the data base 
                                  //MessageBox.Show("Update Successful!");




    }

1 Ответ

0 голосов
/ 01 марта 2019

Прежде всего, создайте объект зависимости столбца, чтобы вы могли избежать нескольких if.( Я знаю, что это необязательное выделение памяти, если вы хотите оптимизировать, вы можете использовать объект Dictionary<int, int>, но я чувствую, что вы не хотите смешивать это с вашей проблемой.)

Если вы создаете массив размером 23, у вас может быть до 22 индексов (это самый высокий индексированный столбец из тех, которые можно дважды щелкнуть).

int[23] doubleClickConnections = new int[23];

Затем вы должны определить только те индексы, которые имеют двойное соединение.Так 2,6,10,14,18,22.Например:

doubleClickConnections[2] = 5;

(Похоже, что у ваших индексов есть шаблон. Ваши левые боковые индексы имеют вид 4n + 2, а ваш правый боковой индекс всегда 4n + 5. Этотакже можно использовать, но я оставляю это вам.)

После того, как вы это сделаете, вы должны использовать свойства DataGridViewCellEventArgs class ', ColumnIndex и RowIndex.(Они возвращают индексы ячейки двойного щелчка.):

int columnToModify = doubleClickConnections[e.ColumnIndex]; //if e.ColumnIndex is 2, this sets the variable to 5 for example.

int valueToAssign = (new object[] {null, 1}).Contains(
    dataGridViewAcorn.Rows[e.RowIndex].Cells[e.ColumnIndex].Value
) ? 0 : 1;
dataGridViewAcorn.Rows[e.RowIndex].Cells[columnToModify].Value = valueToAssign;

Это предполагает, что логика для ввода 0 или 1 в ячейку для изменения всегда одинакова (еслиячейка, по которой щелкают 0, помещает 1, если 1 - 0).


Если вы хотите выполнить первую часть с Dictionary<int, int> объектом:

Dictionary<int, int> doubleClickConnections = new Dictionary<int, int>(6) {
    { 2, 5 },
    { 6, 9 },
    ...
};

Затем вы ссылаетесь на словарь так же, как и на массив, например:

doubleClickConnections[2] //which equals 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...