Brandon Spendlove Ответов: 1

Сохранение нескольких ячеек datagrid в несколько строк


У меня есть представление datagrid, которое показывает информацию из базы данных MySQL. Когда я дважды щелкаю по ячейке, я сохраняю все из gridview в виде открытых строк для использования в другой форме (которая открывается при двойном щелчке), поэтому мне не нужно держать соединение MySQL открытым, чтобы снова получить информацию...

Мой подход к этому таков:

private void grid_laptops_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
    if (e.RowIndex >= 0)
    {
        DataGridViewRow laprow = this.grid_laptops.Rows[e.RowIndex];

        Public_Variables.laptop_id = laprow.Cells[0].Value.ToString();
        Public_Variables.laptop_stockid = laprow.Cells[1].Value.ToString();
        Public_Variables.laptop_manufacture = laprow.Cells[2].Value.ToString();
        Public_Variables.laptop_model = laprow.Cells[3].Value.ToString();
        Public_Variables.laptop_servicetag = laprow.Cells[4].Value.ToString();
        Public_Variables.laptop_condition = laprow.Cells[5].Value.ToString();
        Public_Variables.laptop_cpumodel = laprow.Cells[6].Value.ToString();
        Public_Variables.laptop_cpuspeed = laprow.Cells[7].Value.ToString();
        Public_Variables.laptop_memoryamount = laprow.Cells[8].Value.ToString();
        Public_Variables.laptop_memorytype = laprow.Cells[9].Value.ToString();
        Public_Variables.laptop_harddrive = laprow.Cells[10].Value.ToString();
        Public_Variables.laptop_videocard = laprow.Cells[11].Value.ToString();
        Public_Variables.laptop_videomemory = laprow.Cells[12].Value.ToString();
        Public_Variables.laptop_os = laprow.Cells[13].Value.ToString();
        Public_Variables.laptop_screensize = laprow.Cells[14].Value.ToString();
        Public_Variables.laptop_resolution = laprow.Cells[15].Value.ToString();
        Public_Variables.laptop_webcam = laprow.Cells[16].Value.ToString();
        Public_Variables.laptop_acadapter = laprow.Cells[17].Value.ToString();
        Public_Variables.laptop_ebayid = laprow.Cells[18].Value.ToString();
        Public_Variables.laptop_ebayprice = laprow.Cells[19].Value.ToString();
        Public_Variables.laptop_ebaylink = laprow.Cells[20].Value.ToString();
        Public_Variables.laptop_ebayquantity = laprow.Cells[21].Value.ToString();
        Public_Variables.laptop_ebaystatus = laprow.Cells[22].Value.ToString();
    }

    Single_Window___Grid_View.SingleWindow_Laptop window = new Single_Window___Grid_View.SingleWindow_Laptop();
    window.Show();
}


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

private void grid_storage_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
    string[] storage_public_variables =
    {
        Public_Variables.storage_id, Public_Variables.storage_stockid, Public_Variables.storage_manufacture, Public_Variables.storage_model,
        Public_Variables.storage_servicetag, Public_Variables.storage_condition, Public_Variables.storage_capacity, Public_Variables.storage_firmware,
        Public_Variables.storage_rpm, Public_Variables.storage_cache, Public_Variables.storage_interface, Public_Variables.storage_ebayid,
        Public_Variables.storage_ebayprice, Public_Variables.storage_ebaylink, Public_Variables.storage_ebayquantity, Public_Variables.storage_ebaystatus
    };

    if (e.RowIndex >= 0)
    {
        DataGridViewRow storagerow = this.grid_storage.Rows[e.RowIndex];


        for (int i = 0; i < grid_storage.Rows.Count; i++)
        {
            storage_public_variables[i] = grid_storage.Rows[i].Cells[i].Value.ToString();
        }

        MessageBox.Show("Debug: \n\nStorage ID = " + Public_Variables.storage_id);

    }

    Single_Window___Grid_View.SingleWindow_Storage window = new Single_Window___Grid_View.SingleWindow_Storage();
    window.Show();
}


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

for (int i = 0; i < grid_storage.Rows.Граф; i++)
{
storage_public_variables[я] = grid_storage.Строки[i].Клетки[я].Значение.Метод toString();
}

также пробовать:

частная grid_storage_CellMouseDoubleClick недействительным(объект отправителя, DataGridViewCellMouseEventArgs е)
{
строка[] storage_public_variables =
{
Public_Variables.storage_id, Public_Variables.storage_stockid, Public_Variables.storage_manufacture, Public_Variables.storage_model,
Public_Variables.storage_servicetag, Public_Variables.storage_condition, Public_Variables.storage_capacity, Public_Variables.storage_firmware,
Public_Variables.storage_rpm, Public_Variables.storage_cache, Public_Variables.storage_interface, Public_Variables.storage_ebayid,
Public_Variables.storage_ebayprice, Public_Variables.storage_ebaylink, Public_Variables.storage_ebayquantity, Public_Variables.storage_ebaystatus
};

если (например, RowIndex >= 0)
{
Storagerow ячейки datagridviewrow = это.grid_storage.Ряды[электронный.Параметр rowindex];

for (int i = 0; i & lt; storage_public_variables.Длина; i++)
{
storage_public_variables[i] = storagerow.Клетки[я].Значение.Метод toString();
}

Ящик для сообщений.Show ("Debug: \n\nStorage ID =" + Public_Variables.storage_id);

}

Одно Окно _ _ _ Сетка_Вид.Окна SingleWindow_Storage = новый сингл_окно___сетка_вид.SingleWindow_Storage();
окно.Покажите();
}

1 Ответов

Рейтинг:
8

Richard Deeming

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

В этом случае вы можете просто пройти DataGridViewRow:

// Form 1:
private void grid_storage_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
    var window = new Single_Window___Grid_View.SingleWindow_Storage();
    if (e.RowIndex != 0)
    {
        DataGridViewRow storagerow = this.grid_storage.Rows[e.RowIndex];
        window.LoadStorageRow(storagerow);
    }
    
    window.Show();
}


// SingleWindow_Storage:
public void LoadStorageRow(DataGridViewRow storagerow)
{
    if (storagerow == null) return;
    
    txtStorageId.Text = storagerow.Cells[0].Value.ToString();
    txtStockId.Text = storagerow.Cells[1].Value.ToString();
    ...
}