c# - 根据 TextBox 对 DataTable 的内容进行排序
问题描述
我想通过将我要查找的值放入文本框中来选择我的 DataGridView 的行。我也希望关注/选择最相同的值。
我已经尝试过使用 rowfilter 函数,它给了我这个:
(dgv_DetailComptes.DataSource as DataTable).DefaultView.RowFilter = string.Format("Champ LIKE '%{0}%'", tbx_champ_Cpt.Text);
但是,它会过滤行,这意味着当其他行的内容不是我要查找的内容时,其他行就会消失。我想保留表中的行,并选择包含我要查找的值的行。
此外,我的 DGV 从数据表中获取行/列/值,这样可能会阻止我使用 DataGridView 的行索引来搜索包含该值的行。
有没有办法以这种方式选择我的行?谢谢您的回答。
解决方案
最后我设法找到,做一些我不知道的无用的东西。这是代码:
private void tbx_champ_Cpt_TextChanged(object sender, EventArgs e)
{
if (tbx_champ_Cpt.Text.ToString() == "")
{
for (int i = 0; i < dgv_DetailComptes.Rows.Count - 1; i++)
{
dgv_DetailComptes.Rows[i].Selected = false;
}
}
else
{
tbx_champ_Cpt.SelectionStart = tbx_champ_Cpt.Text.Length;
tbx_champ_Cpt.Text = tbx_champ_Cpt.Text.ToString().ToUpper();
DataTable d = (DataTable)dgv_DetailComptes.DataSource;
String text = tbx_champ_Cpt.Text.ToString();
DataRow[] row = d.Select("Champ like '%" + text + "%'");
List<int> listeIndex = new List<int>();
for (int i = 0; i < dgv_DetailComptes.Rows.Count - 1; i++)
{
foreach (DataRow r in row)
{
if (((DataRowView)dgv_DetailComptes.Rows[i].DataBoundItem).Row == r)
{
dgv_DetailComptes.Rows[i].Selected = true;
listeIndex.Add(i);
}
else if (!listeIndex.Contains(i))
{
dgv_DetailComptes.Rows[i].Selected = false;
}
}
}
}
if (dgv_DetailComptes.SelectedRows.Count != 0)
{
dgv_DetailComptes.FirstDisplayedScrollingRowIndex = dgv_DetailComptes.SelectedRows[0].Index;
}
}
推荐阅读
- r - 如何在我现有的 ggplot2 棒棒糖图表中间插入平均值?
- reactjs - 无法渲染 react-router-dom 基本功能组件
- sql - 是否有任何查询可以找到此 id 信息?
- c++ - 为 buildroot 运行 make 的麻烦
- matlab - 消除信号中的假峰值的问题
- c++ - Linux 上没有控制台应用程序
- excel - 在 VBA 中检查浏览器页面是否就绪的最佳方法
- pytorch - 进入要部署的 PyTorchModel 入口点的推理文件对预测器的输出没有影响
- javascript - 如何在不修改数组本身的情况下更改从数组中获取的值?
- python-3.x - 创建列表的 Pythonic 方式