I have datagridview with some data, and I add a button (column) to this grid do do sth with it later.
//------------------- definitions
DataTable datatable = new DataTable("Points");
this.DATAGRID.DataSource = datatable; //connect data to DATAGRID set in designer
//adding button column
if (DATAGRID.Columns.Contains("Button_column") == false) //I want to add button column only once
{
DataGridViewButtonColumn button_column = new DataGridViewButtonColumn();
button_column.HeaderText = "ON/OFF";
button_column.Text = "Click";
button_column.Name = "Button_column";
button_column.UseColumnTextForButtonValue = true;
DATAGRID.Columns.Add(button_column);
}
//add next columns
datatable.Columns.Add("id", typeof(int));
datatable.Columns.Add("Date", typeof(string));
datatable.Columns.Add("Point", typeof(string));
datatable.Columns.Add("Status", typeof(string));
//set order for the user
DATAGRID.Columns["id"].DisplayIndex = 0; //will need id later
DATAGRID.Columns["id"].Visible = false; //but I hide it from user
DATAGRID.Columns["Date"].DisplayIndex = 1;
DATAGRID.Columns["Point"].DisplayIndex = 2;
DATAGRID.Columns["Status"].DisplayIndex = 3;
DATAGRID.Columns["Button_column"].DisplayIndex = 4;
//------------------- data
int i = 0;
while (r_dane_kontroli.Read())
{
//I add data here
datatable.Rows.Add(1, "Date", "Point"); //adding value to the button here won't work (error "to many columns")
//I TRY TO CHANGE BUTTON TEXT HERE - IN THE LOOP
//this doesn't work no matter if I adress the row or cell via index or name (tried other indexes too...)
if(status == "ON")
DATAGRID.Rows[i].Cells[0].Value = "OFF";
if(status == "OFF")
DATAGRID.Rows[i].Cells[0].Value = "ON";
i++;
}
There is no error. It simply is not working. I don't want to create additional loops after this one.
It does not matter if I add button column programaticly like above, or via designer. Effect is the same. Any solutions?
DATAGRID.Rows[i].Cells[0].Value = "OFF";must be assigned to the button in this way:string status = DATAGRID.Rows[e.RowIndex].Cells["Status"].Value.ToString(); if (status.Equals("ON") { button_collumn.Text = "OFF"; } else {button_collumn.Text = "ON"}button_collumn.Text = "Click";that I have in definitioniinstead ofeI think) and then assign button to text this way:button_collumn.Text = "OFF"- unfortunatelly I tried and it doesn't work, or I don't understand sth (error: button_collumn does not exist in current (loop) context)