【问题标题】:TextBox Example Into Datagridview文本框示例到 Datagridview
【发布时间】:2010-11-23 13:06:03
【问题描述】:

我有如下简单的文本框示例:

private void Form1_Load(object sender, EventArgs e)
    {
        textBox1.Text = "Apple";
    }
private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (textBox1.Text.Length == 1) 
        {
            if (textBox1.Text == "B" || textBox1.Text == "b") 
            {
                textBox1.Text = "Ball";
            }
        }
    }

默认情况下,textbox1 应该在表单加载时返回“Apple”,但是当我按下“b”或“B”时,它应该在 textbox1 上返回“Ball”。我对将它用于 datagridview 感到困惑。我如何在 datagridview 中做到这一点?。

假设我在 datagridview 上有一列,如下所示:

private void Form1_Load(object sender, EventArgs e)
    {
        DataGridViewColumn Particulars = new DataGridViewTextBoxColumn();
        dataGridView1.Columns.Insert(0, Particulars );
    }

如果我在 datagridview1 中有上面的列,而不是如何处理我对文本框所做的 datagridview1?。

【问题讨论】:

    标签: c# visual-studio datagridview


    【解决方案1】:

    您可能会发现使用文本框控件内置的自动完成功能更简单,而不是自己尝试为所有可能的场景编写代码。

    您必须配置 TextBox 控件的两个重要属性以启用其自动完成功能:AutoCompleteModeAutoCompleteSource。。 p>

    AutoCompleteMode 属性允许您选择如何文本框自动完成功能将在操作中显示。您可以在任何AutoCompleteMode values 之间进行选择

    禁用 ComboBox 和 TextBox 控件的自动完成功能。 Suggest 显示与编辑控件关联的辅助下拉列表。此下拉列表中填充了一个或多个建议的完成字符串。 Append 将最可能的候选字符串的其余部分附加到现有字符,突出显示附加的字符。 SuggestAppend 同时应用 Suggest 和 Append 选项。

    AutoCompleteSource 属性允许您指定希望文本框自动完成的字符串。在您的情况下,您可能需要指定 CustomSource,这需要您将 AutoCompleteCustomSource 属性设置为用户定义的字符串集合,例如“Apple, Ball, .. 。”等

    DataGridViewTextBoxColumn 只是托管一个标准的TextBox 控件,因此它提供的所有自动完成功能都已免费提供给您。您可以通过处理DataGridViewEditingControlShowing 事件来设置此文本框的适当属性,如下所示:

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        //Create and fill a list to use as the custom data source
        var source = new AutoCompleteStringCollection();
        source.AddRange(new string[] {"Apple", "Ball"});
    
        //Set the appropriate properties on the textbox control
        TextBox dgvEditBox = e.Control as TextBox;
        if (dgvEditBox != null)
        {
            dgvEditBox.AutoCompleteMode = AutoCompleteMode.Suggest;
            dgvEditBox.AutoCompleteCustomSource = source;
            dgvEditBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
        }
    }
    

    编辑:如果您希望保持与原始文本框示例中相同的行为,您可以处理DataGridViewTextBoxColumnTextChanged 事件强>。正如我在上面已经解释的那样,DataGridViewTextBoxColumn 只是托管一个标准的TextBox 控件,因此为其TextChanged 事件添加一个处理程序并使用与之前相同的代码相当简单:

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        TextBox dgvEditBox = e.Control as TextBox;
        if (dgvEditBox != null)
        {
            //Add a handler for the TextChanged event of the underlying TextBox control
            dgvEditBox.TextChanged += new EventHandler(dgvEditBox_TextChanged);
        }
    }
    
    private void dgvEditBox_TextChanged(object sender, EventArgs e)
    {
        //Extract the textbox control
        TextBox dgvEditBox = (TextBox)sender;
    
        //Insert the appropriate string
        if (dgvEditBox.Text.Length == 1)
        {
            if (dgvEditBox.Text == "B" || dgvEditBox.Text == "b")
            {
                dgvEditBox.Text = "Ball";
            }
        }
    }
    

    【讨论】:

    • @Cody,您的代码有效,我很欣赏您解释它的方式。只需编辑您的代码。您忘记添加“;”到“dgvEditBox.AutoCompleteCustomSource = source”
    • ...我想告诉你的另一件事是,在我的情况下,直接收集工作不像你建议的字符串收集。
    • ... 你的方法太好了。但在某些情况下,可能像我上面带有文本框的代码一样。
    • 必要的。如果您有其他方法,请提出建议。
    • @mahesh:对不起,我真的不明白你想说什么。你是说你不能把你的字符串放到一个集合中?为什么不呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多