2015-05-18 2 views
0

Я хочу получить значение строки, где установлен флажок. Я новичок в формах окон C# и до сих пор не увенчался успехом. Я хочу в конечном итоге использовать эти значения строк, поэтому, если пользователь выбирает несколько строк, а затем я должен получить значение для отмеченных. Кроме того, я установил режим выбора «FullRowSelect»Не получать значения из таблицы сетки, если флажок установлен?

Просьба предложить изменения в свой код

private void button1_Click(object sender, EventArgs e) 
{ 
    StringBuilder ln = new StringBuilder(); 
    dataGridView1.ClearSelection(); 
    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     if (dataGridView1.SelectedRows.Count>0) 
     {      
      ln.Append(row.Cells[1].Value.ToString()); 
     } 
     else 
     { 
      MessageBox.Show("No row is selected!"); 
      break;      
     } 
    } 
    MessageBox.Show("Row Content -" + ln); 
} 
+0

Использование 'dataGridView1.SelectedRows' в цикле Еогеасп, если ((BOOL), а затем проверить' checkboxCell.cbc.Value) – TaW

+0

TAW, вы можете отметить весь код в цикле if ... – user3613720

+0

Вы хотите, чтобы значение столбца из всех отмеченных строк или только первое? Этот цикл завершается рано. – cdkMoose

ответ

0

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

int checkBoxColumnIndex = nnn; // 0 based index of checkboxcolumn 
private void button1_Click(object sender, EventArgs e) 
{ 
    List<string> checkedItems = new List<string>(); 

    dataGridView1.ClearSelection(); 
    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     DataGridViewCheckBoxCell checkBox= row.Cells[checkBoxColumnIndex] as DataGridViewCheckBoxCell; 

     if (Convert.ToBoolean(checkBox.Value) == true) 
     {      
      checkedItems.Add(row.Cells[1].Value.ToString()); 
     } 
    } 
    if (checkItems.Count > 0) 
     MessageBox.Show("Row Content -\r\n" + String.Join("\r\n", checkedItems)); 
    else 
     MessageBox.Show("No row is selected!"); 
} 

Правда, List<string> тяжелая конструкция, если все, что вам нужно сделать, это распечатать список, но было бы полезно, если вам нужно выполнить дальнейшую обработку по всем проверенным значениям.

+0

Здесь есть некоторые проблемы. Я использовал код ур, но когда я нажал на этот флажок и нажал кнопку, он не отобразил строку, выбранную msg. – user3613720

+0

Вы указали правильный индекс столбца для замены nnn? – cdkMoose

+0

Просто собрал простую сетку для тестирования, и это сработало для меня. Убедитесь, что у вас есть правильные индексы. – cdkMoose

0

В SelectedRows является количество строк, которые выбираются (или highlited строки), а не строки, проверяются. Вторая проблема в вашем коде заключается в том, что вы делаете строку foreach, но внутри вы используете dataGridView, а не текущую строку. Это как ваш, если должно быть:

private void button1_Click(object sender, EventArgs e) 
{ 
    const int checkBoxPosition = 3; //You must type here the position of checkbox. 
            // Remember, it's zero based. 

    StringBuilder ln = new StringBuilder(); 
    dataGridView1.ClearSelection(); 
    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     if (row.Cells[checkBoxPosition].Value == true) 
     {      
      ln.Append(row.Cells[1].Value.ToString()); 
     } 
     else 
     { 
      MessageBox.Show("No row is selected!"); 
      break;      
     } 

    } 
    MessageBox.Show("Row Content -" + ln); 
} 
+0

Эта логика останавливается после первой строки, которая не имеет установленного флажка. Это желаемое поведение? – cdkMoose

+0

Richardo, я пробовал приведенный выше код, он получает значения из всего столбца, когда я выбираю одну строку. Я хочу получить значение/s из выбранного ряда. CdkMoose, да или есть лучший способ. – user3613720

0

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

Это не имеет смысла. Может быть, вы имеете в виду проверенные строки? Хорошо, что вы делаете, так что здесь вы идете:

private void button1_Click(object sender, EventArgs e) 
    { 
     StringBuilder ln = new StringBuilder(); 
     dataGridView1.ClearSelection(); 
     foreach (DataGridViewRow row in dataGridView1.Rows) 
     { 
      if (((bool?)row.Cells[0].Value) == true) 
      { 
       ln.Append(row.Cells[1].FormattedValue); 
      } 
     } 
     if (ln.Length <= 0) MessageBox.Show("No rows are checked!"); 
     else MessageBox.Show("Rows content: " + ln); 
} 
+0

TaW, как вы можете сделать это для получения значений из проверочных строк? В настоящее время он получает значения, если вы проверяете и выделяете строки с помощью элемента управления + левый клик .... – user3613720

+0

Ну, это еще проще, чем тогда. – TaW

+0

Спасибо, сработало. – user3613720

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

  • Нет связанных вопросов^_^