c# - 在 DataGrid 中的行之间导航
问题描述
我创建了一个已加载的 sqlite 数据库,DataGrid
但我有两个下一个和上一个按钮,很容易在数据之间导航并将其显示到 Windows 窗体中的相应文本框,DataGridView
但我无法找到在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)
{
//?????
}
解决方案
诀窍是更改 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;
}
推荐阅读
- python - tweepy.error.TweepError: [{'code': 50, 'message': 'User not found.'}]
- xamarin.forms - Stacklayout BindableLayout 中的 Xamarin Forms Switch 使用 MVVM (Prism.Forms) 获取切换事件
- python - 为什么内核在训练开始后很快就死掉了?
- sql - 变量声明显着增加查询时间
- python - 有没有办法获取不在列表中的元素的索引?
- python - 无法在地图标记容器内定位元素/单击红点
- reactjs - Nextjs 配置:模块解析失败:意外字符“@”
- windows - echo %COMSPEC% 不打印路径
- django - Django 查询集。如何只预取唯一的?
- django - 向 Django 请求添加令牌