在DataGrid中的行之间导航

时间:2018-08-13 08:31:28

标签: c# wpf datagrid

我创建了一个在DataGrid中加载的sqlite数据库,但是我有两个“下一个”和“上一个”按钮,很容易在数据之间导航,并使用DataGridView将其显示在Windows窗体中的相应文本框中,但是我无法在DataGrid中找到相同的方法。

这是我的sql数据库代码-

string dbConnectionString = @"Data Source=emsdatabase.db;version=3;";

将数据加载到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);
}

我可以在相应的文本框中显示所选数据:

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();
}

但是在单击下一个或上一个按钮时无法在文本框中显示相应的数据

private void PrevButton_Click(object sender, RoutedEventArgs e)
{
    //?????
}

private void NextButton_Click(object sender, RoutedEventArgs e)
{
    //?????
}

1 个答案:

答案 0 :(得分:2)

技巧是更改SelectedIndex或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++;
}

我们可以在DataView中找到上一个和下一个DataRowView(除非分别选择了第一行或最后一行)。如果可以导航,则更改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;
}