在datagridviewcolomns上方设置搜索文本框

时间:2014-04-03 14:16:04

标签: c# winforms datagridview

我有一个datagridview,在这个datagridview上面我设置了一个flowlayoutpanel,我想在程序上添加一些文本框,用户可以输入一些searchterms。

我从datagrid中获取列的大小:

int size = dataGridView1.Columns[i].Width;

并且gif文本框的大小相同:

TextBox box = new TextBox();
box.Width = size - 1;

但是文本框的大小与列大小不匹配。 而我看不出有什么问题

代码:

public partial class DataTableFormSearch : Form
{
    public DataTableFormSearch()
    {
        InitializeComponent();
        dataGridView1.DataSource = createTable();
        fillPanelWithSearch();
    }

    public DataTable createTable()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("TestCol1", typeof(String));
        dt.Columns.Add("TestCol2", typeof(String));
        dt.Columns.Add("TestCol3", typeof(String));
        dt.Columns.Add("TestCol4", typeof(String));
        dt.Columns.Add("TestCol5", typeof(String));

        return dt;
    }

    public void fillPanelWithSearch()
    {
        flowLayoutPanel1.AutoSize = false;
        for (int i = 0; i < dataGridView1.ColumnCount; i++)
        {

            TextBox box = new TextBox();
            box.Margin = Padding.Empty;
            this.flowLayoutPanel1.Controls.Add(box);
        }
        resizeControls();
    }

    public void resizeControls()
    {
        if (flowLayoutPanel1.Controls.Count > 0)
        {
            for (int i = 0; i < dataGridView1.ColumnCount; i++)
            {
                int size = dataGridView1.Columns[i].Width;

                flowLayoutPanel1.Controls[i].Width = size;
            }
        }
    }

    private void DataTableFormSearch_SizeChanged(object sender, EventArgs e)
    {
        resizeControls();
    }
}

当触发SizeChanged事件时,框会更改为正确的大小,但不会在对话框弹出时

1 个答案:

答案 0 :(得分:1)

尝试将您的方法移动到OnLoad覆盖,因为DataGridView控件及其列在构造函数期间尚未正确调整大小:

protected override void OnLoad(EventArgs e) {
  base.OnLoad(e);
  fillPanelWithSearch();
}