我们当前使用 FoxPro 制作的软件有一个非常好的功能:当我们在网格上键入内容时,会自动调用搜索功能。
示例:我有一个包含卡车列表的网格。当我单击网格并输入卡车编号时,网格会直接转到网格的卡车记录。
我需要在 C# 中实现它,我该怎么做?
PS 在某些情况下,网格可以有可编辑的字段。但如果它太复杂,我不会在那些可编辑的网格上实现它。
我们当前使用 FoxPro 制作的软件有一个非常好的功能:当我们在网格上键入内容时,会自动调用搜索功能。
示例:我有一个包含卡车列表的网格。当我单击网格并输入卡车编号时,网格会直接转到网格的卡车记录。
我需要在 C# 中实现它,我该怎么做?
PS 在某些情况下,网格可以有可编辑的字段。但如果它太复杂,我不会在那些可编辑的网格上实现它。
您可以在表单代码中尝试这样的事情:
TextBox searchBox = new TextBox();
Timer searchTimer = new Timer();
bool keyPressed = true;
public Form1()
{
InitializeComponent();
yourDataGridView.KeyUp += new KeyEventHandler(dgv_KeyUp);
searchTimer.Interval = 5000;
this.Controls.Add(searchBox);
searchBox.KeyUp += new KeyEventHandler(searchBox_KeyUp);
searchTimer.Tick += new EventHandler(timerTick);
searchTimer.Enabled = true;
}
void searchBox_KeyUp(object sender, KeyEventArgs e)
{
keyPressed = true;
}
void dgv_KeyUp(object sender, KeyEventArgs e)
{
searchBox.Show();
searchBox.Text += e.KeyCode.ToString().ToLowerInvariant();
searchBox.Location = Cursor.Position;
searchBox.Focus();
SendKeys.Send("{Right}");
searchBox.BringToFront();
// Do your sorting of your DataGridView here according to your search box
}
void timerTick(object sender, EventArgs e)
{
keyPressed = !keyPressed;
if (keyPressed)
{
searchBox.Text = "";
searchBox.Hide();
}
}
这会让你弹出一个“搜索” TextBox
,它会在 5 秒后消失。您可以使用框中的文本执行您认为合适的搜索DataGridView
您可以使用 TextChanged 事件在网格上方有一个文本框
-------------------
| TextBox here | implement TextChanged event handler for the textbox
-------------------
-------------------
GridView here update this gridview when text changes
-------------------
protected void TextBox1_TextChanged(object sender, EventArgs) //this could be replaced with KeyUp event handlder
{
string truckNo = TextBox1.Text;
var newValues = findTrucksByNo(truckNo);
truckGridView.DataSource = newValues; //rebind items to refresh grid view
}