0

构建: C1Flexgrid v.2.5.20053.230
.Net 4.0 使用 C# WinForms

我的表单上有一个 C1Flexgrid,其中填充了多个数据

//cfg is C1FlexGrid, pDataTable is DataTable

cfg.Clear(ClearFlags.UserData);

foreach (DataColumn dCol in pDataTable.Columns)
{
    cfg.Cols.Count += 1;
    iCol = cfg.Cols.Count - cfg.Cols.Fixed;
    cfg.Cols[iCol].Name = dCol.ColumnName;
    cfg.Cols[iCol].Caption = dCol.ColumnName;
    cfg.Cols[iCol].DataType = dCol.DataType;

    switch (dCol.DataType.ToString())
    {
        case "System.DateTime":
        {
            cfg.Cols[iCol].Format = "dd-MMM-yyyy";
            break;
        }
        case "System.Decimal":
        {
            cfg.Cols[iCol].Format = "N3";
            break;
        }
        default:
            break;
    }
}
cfg.DataSource = pDataTable.Copy();

当我双击日期选择器弹出窗口以选择日期然后移动鼠标时,应用程序崩溃。

edit
更令人担忧的是,如果我使用回车键和箭头键将焦点从日期选择器弹出窗口转移到下一个单元格,则不会出现错误。

关于原因是“我的创造”还是 C1Flexgrid 上的错误的任何想法?

4

1 回答 1

0

您的问题描述中有两件令人困惑的事情。首先是初始化DataTable:pDataTable,其次是你的环境信息。不知道您是如何在 .NET 4.0 项目中添加特定于 Framework 2 的版本的。请转到C1Pre-Release以查找最新的 flexgrid 构建或使用此构建更新您的项目。

请按照以下步骤解决您的问题:

  1. 将项目框架更改为 .NET 4 完整配置文件。您可以通过在解决方案资源管理器中右键单击您的项目来执行此操作。选择应用程序选项卡。将目标框架更改为“.NET Framework 4”

  2. 更新您的 C1FlexGrid 参考。您可以通过在解决方案资源管理器中单击解决方案的引用节点来执行此操作。通过删除将 C1.Win.C1FlexGrid.2 从中删除。通过使用此 build更新来添加新的引用。

  3. 运行您的应用程序

如果这不能解决您的问题,那么根本问题将是您的 pDataTable 初始化。

请参阅以下代码段:

private void Form1_Load(object sender, EventArgs e)
    {
        int iCol;

        pDataTable.Columns.Add("Dosage", typeof(int));
        pDataTable.Columns.Add("Drug", typeof(string));
        pDataTable.Columns.Add("Patient", typeof(string));
        pDataTable.Columns.Add("Date", typeof(DateTime));

        pDataTable.Rows.Add(25, "Indocin", "David", DateTime.Now);
        pDataTable.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
        pDataTable.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
        pDataTable.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
        pDataTable.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);

        this.cfg.Clear(C1.Win.C1FlexGrid.ClearFlags.UserData);

        foreach (DataColumn dCol in pDataTable.Columns)
        {
            cfg.Cols.Count += 1;
            iCol = cfg.Cols.Count - cfg.Cols.Fixed;
            cfg.Cols[iCol].Name = dCol.ColumnName;
            cfg.Cols[iCol].Caption = dCol.ColumnName;
            cfg.Cols[iCol].DataType = dCol.DataType;

            switch (dCol.DataType.ToString())
            {
                case "System.DateTime":
                    {
                        cfg.Cols[iCol].Format = "dd-MMM-yyyy";
                        break;
                    }
                case "System.Decimal":
                    {
                        cfg.Cols[iCol].Format = "N3";
                        break;
                    }
                default:
                    break;
            }
        }
        cfg.DataSource = pDataTable.Copy();
    } 

除了环境之外,此代码段的唯一区别是DataTable 的结构。当我编译时,当我双击日期选择器弹出窗口选择一个日期然后移动鼠标时,没有观察到崩溃。

您可以从这里下载工作项目

于 2014-07-21T09:55:39.213 回答