Reputation: 79
I have created a sqlite database which is loaded in DataGrid
but I have two Next and Previous Buttons, it is easy to navigated between data and show it to corresponding textbox in Windows Forms with DataGridView
but I am unable to find a way to do same in DataGrid
.
Here is my sql database code -
string dbConnectionString = @"Data Source=emsdatabase.db;version=3;";
Loading data into DataGrid :
SQLiteConnection sqliteCon = new SQLiteConnection(dbConnectionString);
try
{
sqliteCon.Open();
string Query = "select Eid,Name,Mobile,Gender,Email from employeeinfo";
SQLiteCommand createCommand = new SQLiteCommand(Query, sqliteCon);
createCommand.ExecuteNonQuery();
SQLiteDataAdapter dataAdp = new SQLiteDataAdapter(createCommand);
DataTable dt = new DataTable("employeeinfo");
dataAdp.Fill(dt);
TableDataGrid.ItemsSource = dt.DefaultView;
dataAdp.Update(dt);
sqliteCon.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
I can display selected data in corresponding textboxes:
DataGrid gd = (DataGrid)sender;
DataRowView rowSelected = gd.SelectedItem as DataRowView;
if (rowSelected != null)
{
EidTextBox.Text = rowSelected["Eid"].ToString();
NameTextBox.Text = rowSelected["Name"].ToString();
MobileTextBox.Text = rowSelected["Mobile"].ToString();
GenderTextBox.Text = rowSelected["Gender"].ToString();
EmailTextBox.Text = rowSelected["Email"].ToString();
}
But Unable to show corresponding data on textbox on next or previous button click
private void PrevButton_Click(object sender, RoutedEventArgs e)
{
//?????
}
private void NextButton_Click(object sender, RoutedEventArgs e)
{
//?????
}
Upvotes: 3
Views: 340
Reputation: 35679
The trick is to change SelectedIndex or SelectedItem.
private void PreviousClick(object sender, RoutedEventArgs e)
{
if (TableDataGrid.SelectedIndex > 0)
TableDataGrid.SelectedIndex--;
}
private void NextClick(object sender, RoutedEventArgs e)
{
if (TableDataGrid.SelectedIndex < TableDataGrid.Items.Count - 1)
TableDataGrid.SelectedIndex++;
}
We can find previous and next DataRowView in DataView (except when very first or last rows are selected respectively). If navigation is possible, then change DataGrid.SelectedItem:
private void PreviousClick(object sender, RoutedEventArgs e)
{
DataRowView rowSelected = TableDataGrid.SelectedItem as DataRowView;
if (rowSelected == null)
return;
int idx = GetDataRowViewIndex(rowSelected);
if (idx > 0)
TableDataGrid.SelectedItem = rowSelected.DataView[idx - 1];
}
private void NextClick(object sender, RoutedEventArgs e)
{
DataRowView rowSelected = TableDataGrid.SelectedItem as DataRowView;
if (rowSelected == null)
return;
int idx = GetDataRowViewIndex(rowSelected);
if (idx < rowSelected.DataView.Count - 1)
TableDataGrid.SelectedItem = rowSelected.DataView[idx + 1];
}
int GetDataRowViewIndex(DataRowView row)
{
for (int i = 0; i < row.DataView.Count; i++)
if (row.DataView[i] == row)
return i;
return -1;
}
Upvotes: 2