У меня есть DataGridView, содержащий данные из базы данных и кнопку просмотра сетки Просмотр .
Мой план,
Использование события gridView.Click()
, когда я щелкните по строке, данные в столбце indexno
в выбранной строке будут переданы в форму RecEdit
с помощью конструктора. Так что я могу сделать редактирование и, наконец, сохранить. В целях отладки я отобразил данные, используя MesssageBox
Этот процесс отлично работает для первого редактирования
, но не удалось со второй попытки (после сохранения первого редактирования).
В процессе отладки я обнаружил, что это происходит потому, что когда я сохраните и обновите sh сетка данных view
кнопка сетки достигает index 0
из index 9
позиции на сетке данных.
Мне удалось найти это решение,
private void gridviewtable_Click(object sender, EventArgs e)
{
selectedRow = gridviewtable.CurrentRow.Cells[0].Value.ToString();
if(selectedRow == "View")
{
// if index 0 is "View" get index 1
selectedRow = gridviewtable.CurrentRow.Cells[1].Value.ToString();
}
}
Работает нормально, но не является идеальным решением, поэтому я надеюсь получить совет для решения этой проблемы.
Метод, используемый для перезагрузки данных,
// --- Search query ---
public void searchData(string searchString)
{
db.openConnection(); // open connection
string sQuery = "SELECT indexno,firstname,lastname,address,gender,dob,email,faculty,mobile FROM student WHERE CONCAT("+getConstraints().ToString()+" ) LIKE '%" + searchString + "%'";
MySqlCommand cmd = new MySqlCommand(sQuery, db.getConnection());
MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
DataTable table = new DataTable();
adapter.Fill(table);
gridviewtable.DataSource = table;
//gridviewtable.Columns.Remove("View");
db.openConnection(); // close connection
}
Метод загрузки формы данных,
private void Records_Load(object sender, EventArgs e)
{
string sQuery = "SELECT indexno,firstname,lastname,address,gender,dob,email,faculty,mobile FROM student WHERE CONCAT(" + getConstraints().ToString() + " ) LIKE '%%'";
MySqlCommand cmd = new MySqlCommand(sQuery, db.getConnection());
MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
DataTable table = new DataTable();
adapter.Fill(table);
gridviewtable.DataSource = table;
// --- view buttons ---
DataGridViewButtonColumn viewBtn = new DataGridViewButtonColumn();
// - view btn -
viewBtn.HeaderText = "View";
viewBtn.Name = "View";
viewBtn.Text = "View";
viewBtn.FlatStyle = FlatStyle.Flat;
viewBtn.DefaultCellStyle.BackColor = Color.FromArgb(46, 169, 76);
viewBtn.UseColumnTextForButtonValue = true;
gridviewtable.Columns.Insert(9, viewBtn);
}
Событие GridView_Click,
private void gridviewtable_Click(object sender, EventArgs e)
{
MessageBox.Show(gridviewtable.CurrentRow.Cells[0].Value.ToString()); // show selected IndexNo
selectedRow = gridviewtable.CurrentRow.Cells[0].Value.ToString();
/* my solution
if(selectedRow == "View")
{
selectedRow = gridviewtable.CurrentRow.Cells[1].Value.ToString();
}*/
}
объект openRecs,
// inside public partial class RecEdit : Form
Records openRecs = (Records)Application.OpenForms["Records"];
Как refre sh выполняется при сохранении,
// query executed?
if (cmd.ExecuteNonQuery() == 1)
{
openRecs.searchData(""); // refreshing by reloading data from db
this.Close();
}