【问题标题】:Adding row to bound datagridview from oracle database从oracle数据库将行添加到绑定的datagridview
【发布时间】:2017-05-01 06:48:45
【问题描述】:

我正在尝试构建由两部分组成的datagridview 一部分来自数据库,另一部分是收集有关本地硬盘上文件的信息并将其显示为一部分,但我收到错误消息,上面写着

无法以编程方式将行添加到 datagridview 行 控件绑定数据时的集合

注意: 知道datagridview里面的数据以后会被用来修改oracle数据库的数据

我已经上传了图片以便更了解前两列来自数据库

private void ListFileToBePatched()
{
    try
    {
        string connstr = "data source=orcl;user id=user;password=pwd";
        string cmdstr = @"SELECT OFFICE_CODE as ""Office Code"",
                                 IP_ADDRESS  as ""Office IP"" 
                            FROM table";

        string[] array = Directory.GetFiles(SBankfilespath, "*.txt");

        using (OracleConnection conn = new OracleConnection(connstr))
        using (OracleCommand cmd = new OracleCommand(cmdstr, conn))
        {
            conn.Open();
            OracleTransaction trans = conn.BeginTransaction();

            OracleDataReader OraReader = cmd.ExecuteReader();

            DataTable dt = new DataTable();

            DataColumn OfficeCodecolumn = new DataColumn();
            OfficeCodecolumn.DataType = System.Type.GetType("System.String");
            OfficeCodecolumn.ColumnName = "Office Code";
            dt.Columns.Add(OfficeCodecolumn);

            DataColumn OfficeIPcolumn = new DataColumn();
            OfficeIPcolumn.DataType = System.Type.GetType("System.String");
            OfficeIPcolumn.ColumnName = "Office IP Address";
            dt.Columns.Add(OfficeIPcolumn);

            DataColumn FileNamecolumn = new DataColumn();
            FileNamecolumn.DataType = System.Type.GetType("System.String");
            FileNamecolumn.ColumnName = "File Name";
            dt.Columns.Add(FileNamecolumn);

            DataColumn FullFilePathcolumn = new DataColumn();
            FullFilePathcolumn.DataType = System.Type.GetType("System.String");
            FullFilePathcolumn.ColumnName = "Full File Path";
            dt.Columns.Add(FullFilePathcolumn);

            DataColumn DateCreatedcolumn = new DataColumn();
            DateCreatedcolumn.DataType = System.Type.GetType("System.String");
            DateCreatedcolumn.ColumnName = "Date Created";
            dt.Columns.Add(DateCreatedcolumn);

            DataColumn Datemodifiedcolumn = new DataColumn();
            Datemodifiedcolumn.DataType = System.Type.GetType("System.String");
            Datemodifiedcolumn.ColumnName = "Date modified";
            dt.Columns.Add(Datemodifiedcolumn);

            foreach (string FullFilePath in array)
            {
                DataRow row = dt.NewRow();

                row[2] = Path.GetFileName(FullFilePath);
                row[3] = FullFilePath;
                row[4] = File.GetCreationTime(FullFilePath);
                row[5] = File.GetLastWriteTime(FullFilePath);

                dt.Rows.Add(row);
            }

            dt.Load(OraReader);
            DataView view = new DataView(dt);
            DGV_PatchStatus.DataSource = view;
        }
        FileCount.Text = "File Count ( " + DGV_PatchStatus.Rows.Count.ToString() + " )";
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

【问题讨论】:

  • 将该行添加到您的DataTable 并再次绑定

标签: c# oracle winforms datagridview


【解决方案1】:

您可以使用DataTable.NewRow 方法将该行添加到您的DataTable

foreach (string FullFilePath in array)
{
    DataRow r = DT.NewRow();

    r[0] = Path.GetFileName(FullFilePath);
    r[1] = FullFilePath;
    r[2] = File.GetCreationTime(FullFilePath);
    r[3] = File.GetLastWriteTime(FullFilePath);
}

然后只需将DT 再次绑定为DataSource

DGV_PatchStatus.DataSource = DT;

编辑:

我真正需要的是每个办公室都有文件列表

如果您的每个办公室行都有多个文件,您应该看看这个Tree-View-Tutorial,这可能真的有助于实现您想要的结果。

这里还有一个Nested-DataGrid-Example,可能也会有所帮助。祝你好运。

【讨论】:

  • 异常'找不到第0列'为零是datagridview列的索引吗?还是我之前在创建 datagridview 时命名的名称?
  • 其实应该是列索引。您的数据表有多少列?
  • 它有 6 列,包括那些来自数据库的列。我试图更改索引,但这不会解决问题
  • @btw 我已经手动将列添加到 datagridview 是正确的吗?或者它会像您将数据从数据库绑定到 datagridview 一样自动创建?所以不需要手动创建它们?
  • 我上传了图片以便更了解前两列来自数据库
【解决方案2】:

从数据库读取后为您的数据创建类,将数据分配给该对象并将对象放入列表,然后将 DGV_PatchStatus.DataSource 初始化到该列表,当您需要添加新行时,只需将数据对象添加到该列表并重新初始化 DGV_PatchStatus DataSource

【讨论】:

  • 拜托你能给我举个例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多