C # DataGridView caixa de seleção marcada Evento - várias linhas?
-
21-08-2019 - |
Pergunta
Eu tenho um datagridview com várias colunas e linhas. A primeira coluna contém uma caixa de verificação. Eu quero o usuário seja capaz de selecionar várias caixas de seleção e, em seguida, executar uma ação. Por exemplo, se seleccionar caixas nas linhas 1 e 2, os dados de outras colunas nas linhas 1 e 2 pode ser seleccionado e passou para um messagebox.
Eu sei que eu preciso para usar o evento checkbox_changed para fazer isso. No entanto, estou tendo problemas para trabalhar fora como fazer isso de várias linhas?
Solução
No evento Click do botão fazer:
static int SelectColumnIndex = 0;
PerformAction_Click(object sender, System.EventArgs e)
{
string data = string.Empty;
foreach(DataGridViewRow row in MyDataGridView.Rows)
{
if(row.Cells[SelectColumnIndex].Value!=null &&
Convert.ToBoolean(row.Cells[SelectColumnIndex].Value) == true)
{
foreach(DataGridViewCell cell in row.Cells)
{
if(cell.OwningColumn.Index!= SelectColumnIndex)
{
data+= (cell.Value + " ") ; // do some thing
}
}
data+="\n";
}
}
MessageBox.Show(data, "Data");
}
Outras dicas
Se você deseja que o usuário clique em um botão para executar a ação, então o que você precisa para lidar com o evento Click do botão, não o CheckBox Changed evento ... Quando o botão é clicado, basta ir através de todos fileiras de seu DataGridView e executar uma ação em linhas com uma caixa de seleção marcada.
static int SelectColumnIndex = 0;
PerformAction_Click(object sender, System.EventArgs e)
{
string data = string.Empty;
foreach(DataGridViewRow row in MyDataGridView.Rows)
{
if(row.Cells[SelectColumnIndex].Value != null
&&
Convert.ToBoolean(row.Cells[SelectColumnIndex].Value) == true)
{
foreach(DataGridViewCell cell in row.Cells)
{
if (cell.OwningColumn.Index != SelectColumnIndex)
{
data+= (cell.Value + " ") ; // do some thing
}
}
data+="\n";
}
}
MessageBox.Show(data, "Data");
}
Eu acho que você não precisa de qualquer evento i resolveu este problema por este código:
//In Fill DataGridViewEvent :
DataGridViewCheckBoxColumn ChCol = new DataGridViewCheckBoxColumn();
ChCol.Name = "CheckedRow";
ChCol.HeaderText = "انتخاب";
ChCol.Width = 50;
ChCol.TrueValue = "1";
ChCol.FalseValue = "0";
dg.Columns.Insert(0, ChCol);
// In Button Event put these codes:
try
{
MessageBox.Show(row.Cells[2].Value.ToString() + " --> " +
row.Cells["CheckedRow"].Value.ToString());
}
catch
{
// Nothing Act
}
enter code here
A sua saída por este parâmetro: ItemID -> 0 // Para valores não verificados ItemID -> 1 // Para valores marcados
Agora você pode filtrar as linhas que o retorno 1 como valor para a sua acção Eu testei este código e ele funciona para mim