是否可以创建一个看起来像这样的DataGridView?

时间:2014-01-06 17:31:13

标签: c# .net vb.net winforms datagridview

enter image description here

这是通过使用一些第三方组件(如C1)开发的。如你所见,这里有三种行......

Type 1. L0000000000000000420 - 这种行是从数据库中提取的。 (只读)

Type 2. Enter Amount - 这种行是供用户输入的金额。 (这个可能还包含某些列中的下拉列表)(仅在选中时可编辑)

Type 3. WHITE ROW - 这只是一个空白的只读行,以获得更好的外观和感觉。

我想知道是否有可能在不使用任何第三方组件的情况下创建类似的DataGridView? 我的想法是..将数据库中的行提取到DataTable然后循环它...我想在每个已提取的行之后在DataTable中添加两个额外的空行。

我还会添加一个列,其值为

A - (这表示类型1)

B - (这表示类型2)

C - (这表示类型3)

A

C ..等等

然后,我将检查循环中的行类型,然后将该行的属性设置为只读/可编辑颜色属性。

但我不确定这是否真的可行。我不确定如何仅为tpe 2列添加ComboBox。因为如果我添加一个ComboBox列,它将显示在所有三行中。这可能吗?如果是的话,你能给我一些想法吗?在我提出一些更具体的问题之前,我需要知道如何才能做到这一点。谢谢。

1 个答案:

答案 0 :(得分:2)

我可能同意WPF对这类事情更好/更快,但是他是否使用它是他的选择。从头开始学习WPF并不是 快......

只要手动将数据绑定到DataGridView,您就可以控制单个单元格的行为和外观,当然包括颜色(这是最简单的部分)。我为“消失的组合框”单元格添加了一个示例。最后一列是简单的DataGridViewComboBoxColumn

enter image description here

private void Form1_Load(object sender, EventArgs e)
{

    dataGridView1.Rows.Add(new[] { "L00000422", "", "","A" });
    dataGridView1.Rows.Add(new[] { "Enter Amount", "", "","" });
    dataGridView1.Rows.Add(new[] { "", "", "","" });
    dataGridView1.Rows.Add(new[] { "L00000423", "", "" ,"B"});
    dataGridView1.Rows.Add(new[] { "Enter Amount", "", "", "" });
    dataGridView1.Rows.Add(new[] { "", "", "", "" });

    foreach (var row in dataGridView1.Rows)
    {
        var r = (DataGridViewRow) row;
        foreach (var col in dataGridView1.Columns)
        {
            var cl = (DataGridViewColumn) col;
            if (cl.Index == 3)
            {
                var cc = (DataGridViewComboBoxCell)dataGridView1[3,r.Index];
                if (r.Index % 3 != 0)
                {
                    cc.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
                    cc.ReadOnly = true;
                }
                else
                {
                    cc.DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton;
                    cc.ReadOnly = false;
                }
            }
        }
    }
}