Неясно, что вы пытаетесь сделать, однако из того, что я могу расшифровать, когда форма загружается, кажется, вызывать несуществующий метод allID
? … Я предполагаю, что вы имеете в виду allId
, который заполняет сетку тремя (3) столбцами данных: id, name и cell.
Затем DataGridViewCheckBoxColumn
«добавляется» в сетку. Это добавит столбец флажка в качестве «последнего» столбца в сетке, который в этом примере будет иметь индекс три (3).
Я предполагаю, что в событии нажатия кнопки, вы хотите захватитьвсе строки, в которых есть столбец флажка «флажок». Опубликованное событие button2_Click
сбивает с толку, и я предполагаю, что мне не хватает чего-то, что не было объяснено.
Для начала неясно, что за cellphones
переменная IS… я предполагаю, что вы имеете в виду List<string> celulares
???
В первом цикле foreach
, проходящем по строкам сетки, создается впечатление, что оно добавляет первое [0] значение ячейки (ID) в список celulares
, если значение в ячейке [1] (имя) равно true
???
Принимая это из опубликованного кода, может показаться, что оператор if
….
if (row.Cells[1].Value.Equals(true))
БУДЕТ ВСЕГДА ОТКАЗАТЬ, так как значение ячейки в индексе один [1] является полем name
и никогда не будет истинным.
Затем появляется второй цикл for
, который проходит через всеэлементы в списке celulares
и объединяет эти строки в одинстрока bloque
. Неясно, для чего предназначены все остальные «неиспользуемые» переменные. И непонятно, зачем вам для этого нужны два (2) цикла.
Похоже, что цель здесь - заполнить строку bloque
всеми идентификаторами из всех проверенных строк в сетке. Я понятия не имею, для чего нужна переменная Contador
.
Для простоты. Ниже приведен пример, который просто собирает всю информацию из каждой строки, которая «проверена», и добавляет эту информацию в строку «блочных» вместе с массовым текстом. Я предполагаю, что если вы хотите отправить «одно и то же» сообщение всем клиентам, то добавление «одного и того же» сообщения для каждого клиента в список не требуется. В приведенном ниже примере будет добавлено одно и то же сообщение для каждого клиента.
private void Form1_Load(object sender, EventArgs e) {
allID();
DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn();
chk.HeaderText = "Select";
chk.Name = "check";
dtgId.Columns.Add(chk);
dtgId.AllowUserToAddRows = false;
}
public void allID() {
try {
dtgId.DataSource = GetTable();
}
catch (SqlException ex) {
MessageBox.Show("Error: " + ex.Message);
}
}
private DataTable GetTable() {
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("CellPhone", typeof(string));
for (int i = 0; i < 25; i++) {
dt.Rows.Add(i, "name_" + i, "cellPhone_" + i);
}
return dt;
}
private void button2_Click(object sender, EventArgs e) {
StringBuilder bloque = new StringBuilder();
foreach (DataGridViewRow row in dtgId.Rows) {
if (row.Cells["check"].Value != null && row.Cells["check"].Value.Equals(true)) {
bloque.AppendLine("ID: " + row.Cells["ID"].Value + "\t" + row.Cells["Name"].Value + "\t" + row.Cells["CellPhone"].Value + "\t" + txtTexto.Text);
}
}
// unclear what you want to do with bloque...?
textBox1.Text += bloque.ToString();
textBox1.Text += "---------------------------------------------" + Environment.NewLine;
}