如何向DataGridView添加动态数量的列(我想创建一个时间线)

时间:2014-10-07 21:29:15

标签: c# datagridview datacolumn

我在C#中制作一个小程序,用户必须选择一个特定日期并填写三个不同阶段的长度(开始 - ,中 - 和结束阶段)。收到这些数据后,我希望程序以DataGridView的形式显示时间线。因此列的总量应该是这些阶段长度的总和。现在我与实际日期没有任何关系,我只想要一个表格,显示与用户选择的天数一样多的列。

所以我 - 在C#中成为一个新手 - 认为我可以用“for循环”做到这一点

public static int startStage;
public static int midStage;
public static int endStage;

private DataGridView timeLine;
private DataGridViewColumn[] AllDays = new DataGridViewColumn[startStage+ midStage+ endStage];

private void createTimeLine()
{
        for (int x = 0; x < (startStage+ midStage+ endStage); x++)
        {

            AllDays[x] = new DataGridViewColumn();

            timeLine.Columns.Add(AllDays[x]);
        }

}

嗯,这不起作用,因为timeLine.Columns.Add();想要包含一个带有标题和类型的新列。我不知道该怎么做,谷歌也没有给我任何有用的建议。所以,如果有人能给我一个解决方案,或者只是在正确的方向上给予帮助,我将非常感激:)!

2 个答案:

答案 0 :(得分:1)

我认为问题在于您需要为列指定单元格模板。

尝试以下方法:

 new DataGridViewColumn() { CellTemplate = new DataGridViewTextBoxCell() };

更明确地说:

private void createTimeLine()
{
    for (int x = 0; x < (startStage+ midStage+ endStage); x++)
    {
        AllDays[x] = new DataGridViewColumn();
        AllDays[x].CellTemplate = new DataGridViewTextBoxCell(); // for TextBox
        timeLine.Columns.Add(AllDays[x]);
    }

}

这将生成没有标题的空白列。

您还可以通过生成DataGridViewTextBoxColumns来进一步缩短它:

private void createTimeLine()
{
    for (int x = 0; x < (startStage+ midStage+ endStage); x++)
    {
        AllDays[x] = new DataGridViewTextBoxColumn();
        timeLine.Columns.Add(AllDays[x]);
    }

}

答案 1 :(得分:0)

您只需要添加HeaderText和Column To Columns.Add方法即可轻松实现....

    public static int startStage=10;
    public static int midStage=2;
    public static int endStage=1;
    private DataGridView timeLine= new DataGridView();

    private void createTimeLine()
    {
       for (int x = 0; x < (startStage + midStage + endStage); x++)
        {
         timeLine.Columns.Add(x.ToString(),x.ToString());
        }
    }