这是通过使用一些第三方组件(如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列,它将显示在所有三行中。这可能吗?如果是的话,你能给我一些想法吗?在我提出一些更具体的问题之前,我需要知道如何才能做到这一点。谢谢。
答案 0 :(得分:2)
我可能同意WPF对这类事情更好/更快,但是他是否使用它是他的选择。从头开始学习WPF并不是 快......
只要手动将数据绑定到DataGridView
,您就可以控制单个单元格的行为和外观,当然包括颜色(这是最简单的部分)。我为“消失的组合框”单元格添加了一个示例。最后一列是简单的DataGridViewComboBoxColumn
。
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;
}
}
}
}
}