2014-10-16 3 views
1

У меня есть два datagridviews в одной форме, которые имеют несколько похожих колонок Когда пользователь нажимает кнопку, данные selectedrow 2-го и 3-го столбцов 2-го datagridview должны перейти к 1-му и 2-й столбец 1-го datagridview. Я извлекаться данные, используяДанные от одного datagridview к другому C# .net

string strppno = dataGridView2.SelectedCells[1].Value.ToString(); 
string strpartno = dataGridView2.SelectedCells[2].Value.ToString(); 

и я могу вставить во второй DataGridView с помощью

dataGridView1.Rows[0].Cells[1].Value = strppno; 
dataGridView1.Rows[0].Cells[2].Value = strpartno; 

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

Может кто-то, пожалуйста, помогите мне. Я заранее благодарю вас за любые предложения. Image for reference

первая попытка.

for (int index = 0; index < dataGridView2.Rows.Count; index++) 
{ 
int editIndex = dataGridView1.Rows.Add(); 
dataGridView1.Rows[editIndex].Cells[0].Value = dataGridView2.Rows[index].Cells[1].Value; 
dataGridView1.Rows[editIndex].Cells[1].Value = dataGridView2.Rows[index].Cells[2].Value; 
} 

это выводит все содержимое из datagridview 2. Я просто хочу выбранный.

Вторая попытка.

string strppno = dataGridView2.SelectedCells[1].Value.ToString(); 
string strpartno = dataGridView2.SelectedCells[2].Value.ToString(); 

for (int i = dataGridView2.SelectedRows.Count; i < dataGridView2.SelectedRows.Count + 1; i++) 
{ 
    dataGridView1.Rows[i].Cells[i].Value = strppno; 
    dataGridView1.Rows[i].Cells[i + 1].Value = strpartno; 
} 
    dataGridView1.Rows.Add(dataGridView2.SelectedRows.Count); 
} 

Этот вид приносит вещи, которые я хочу, но в неправильной ячейке плюс цикл продолжает работать. :( я продолжал возиться со 2-го цикла, но не может получить ожидаемые результаты .. :(

+0

выглядит как вложенный цикл для меня. посмотрите на итерацию 2D-массива - должен вам помочь :) –

+0

Я попробовал, но я, похоже, не даю нужных результатов. Мог бы, пожалуйста, показать мне пример. –

+0

Не могли бы вы показать мне свою попытку, и мы посмотрим, можем ли мы указать вам в правильном направлении. –

ответ

0

ОК Итак, я получил это ... проблема возникает, когда вы добавляете новую строку в dataGridView. Он не добавляется после существующих данных, но добавляет перед ним. поэтому возникает исключение. Решение ниже на всякий случай, если кому-то это понадобится. :)

int count =0; // declare in public class 

private void button3_Click(object sender, EventArgs e) 
    { 
     if (dataGridView2.SelectedRows.Count > 0) 
     { 
     dataGridView1.Rows.Add(dataGridView2.SelectedRows.Count); // add rows before entering data inside the new dataGridView. 
     } 
     foreach (DataGridViewRow row in dataGridView2.SelectedRows) 
     { 

      { 
       string value1 = row.Cells[0].Value.ToString(); 
       string value2 = row.Cells[1].Value.ToString(); 
       dataGridView1.Rows[count].Cells[0].Value = value1; 
       dataGridView1.Rows[count].Cells[1].Value = value2; 
      } 
     } 

     count =count + 1; 
     dataGridView2.ClearSelection(); // I used this because i have to work with 4 dataGridViews 
} 
1

что-то, как это будет полезно для вас:

private void dataGridView_SelectionChanged(object sender, EventArgs e) { 
      foreach (DataGridViewRow row in dataGridView.SelectedRows) { 
       string value1 = row.Cells[0].Value.ToString(); 
       string value2 = row.Cells[1].Value.ToString(); 
       //... 
       //also set the second datagrid from here too 
      } 
     } 

Таким образом, в вашем примере, вы будете хотеть, чтобы использовать только 2-й и 3-й Cell Value, и назначая их на другое DataGrid :)


Как примечание стороны, чтобы сделать ваши переменные более удобным для чтения/и т.д., вы должны привыкнуть к использованию camelCase,

т.е.

ваш string strpartno должен стать string strPartNo

, а также наименования DataGridViews правильно/и т.д.


из Вашего комментария, я понял ваш insertInto код должен быть слегка изменен :

В настоящее время, если вы разместите их:

dataGridView1.Rows[0].Cells[1].Value = strppno; 
dataGridView1.Rows[0].Cells[2].Value = strpartno; 
       ^
        | 
       this will only place it into index 0 of the datagrid 

Итак, что я предлагаю, чтобы первый

int count = ... //count number of rows in SecondDatagrid 

Затем сделайте:

dataGridView1.Rows[count++].Cells[1].Value = strppno; 
dataGridView1.Rows[count++].Cells[2].Value = strpartno; 
       ^
        | 
       this will only place it into next 
       available row of the datagrid    

таким образом, вы все еще вставляя в первые две колонки, но не перезаписывания хранящихся в настоящее время.

+1

Мне действительно нужно это на мероприятии с нажатием кнопки. Я попробую это прямо сейчас ... Я использую camelCase все время. Редактирование так сильно расстроило меня ... поэтому в конечном итоге конвенции начали меняться. : P: P: P Я попробую это и дам вам знать. :) –

+0

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

+0

Скажите, что в dataGridView2 есть 10 строк ... Я хочу добавить 1,3,4,7 в dataGridView1. Я выбираю 1 .. нажмите добавить .. это работает. Теперь, когда я выбираю строку № 3 и я нажимаю кнопку «Добавить», новая строка должна быть добавлена ​​в dataGridView1 под строкой 1, и аналогичным образом следует добавить другие. В настоящее время он заменяет строку 1. –

Смежные вопросы