1

我们当前使用 FoxPro 制作的软件有一个非常好的功能:当我们在网格上键入内容时,会自动调用搜索功能。

示例:我有一个包含卡车列表的网格。当我单击网格并输入卡车编号时,网格会直接转到网格的卡车记录。

我需要在 C# 中实现它,我该怎么做?

PS 在某些情况下,网格可以有可编辑的字段。但如果它太复杂,我不会在那些可编辑的网格上实现它。

4

2 回答 2

0

您可以在表单代码中尝试这样的事情:

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

于 2012-10-24T22:32:36.567 回答
-1

您可以使用 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
}
于 2012-10-24T22:26:47.327 回答