1

我在作为父子关系的数据集中有两个表。我想在同一个 DataGridView 中显示和编辑它们。所以我将感兴趣的父列添加到子表中。

可视化没问题。在 DataGridView 中,我看到所有子行,并且父表中的子行被多次列出(这是预期的 - 其他主题)。但是在编辑时(双击单元格或按“F2”)是不可能的,即我只能编辑原始子表中的列。试图强制列 ReadOnly = false;将导致错误。

选择这种显示形式的原因是为了以紧凑的方式将数据获取到我的应用程序中。将有一些额外的逻辑用于从数据表中添加和删除行,这超出了本问题的范围。

附上一个小demo程序:

class DataGridViewDemo : Form
{
    private DataGridView dataGridView1 = new DataGridView();

    [STAThreadAttribute()]
    public static void Main()
    {
        Application.Run(new DataGridViewDemo());
    }


    public DataGridViewDemo()
    {
        this.dataGridView1.Dock = DockStyle.Fill;
        this.dataGridView1.AllowUserToAddRows = false;

        this.Controls.Add(this.dataGridView1);
        this.Load += new EventHandler(DataTableProblem);
        this.Text = "DataGridView row demo";
    }


    public void DataTableProblem(object sender, EventArgs e)
    {
        DataSet ds = new DataSet();

        DataTable parentTable = new DataTable("Parent");
        DataTable childTable = new DataTable("Child");

        ds.Tables.Add(parentTable);
        ds.Tables.Add(childTable);

        DataColumn column;
        DataRow row;

        column = new DataColumn("ID", System.Type.GetType("System.Int32"));
        ds.Tables["Parent"].Columns.Add(column);
        column = new DataColumn("ParentName", System.Type.GetType("System.String"));
        ds.Tables["Parent"].Columns.Add(column);

        row = ds.Tables["Parent"].NewRow();
        row["ID"] = 1;
        row["ParentName"] = "Test";
        ds.Tables["Parent"].Rows.Add(row);

        column = new DataColumn("ID", System.Type.GetType("System.Int32"));
        ds.Tables["Child"].Columns.Add(column);
        column = new DataColumn("parentID", System.Type.GetType("System.Int32"));
        ds.Tables["Child"].Columns.Add(column);
        column = new DataColumn("ChildName", System.Type.GetType("System.String"));
        ds.Tables["Child"].Columns.Add(column);

        row = ds.Tables["Child"].NewRow();
        row["ID"] = 1;
        row["parentID"] = 1;
        row["ChildName"] = "My Name";
        ds.Tables["Child"].Rows.Add(row);

        row = ds.Tables["Child"].NewRow();
        row["ID"] = 2;
        row["parentID"] = 1;
        row["ChildName"] = "My other Name";
        ds.Tables["Child"].Rows.Add(row);

        DataRelation relation = new DataRelation(
            "p2c",
            ds.Tables["Parent"].Columns["ID"],
            ds.Tables["Child"].Columns["parentID"]);

        ds.Relations.Add(relation);

        ds.Tables["Child"].Columns.Add(
            "ParentName",
            ds.Tables["Parent"].Columns["ParentName"].DataType,
            "Parent(p2c).ParentName");

        dataGridView1.DataSource = ds.Tables["Child"];
        //dataGridView1.Columns["ParentName"].ReadOnly = false; // --> removing comment will result in an error
        dataGridView1.Refresh();
    }
}

任何人都可以向我提示正确的方向如何使所有列都可编辑吗?

非常感谢

4

0 回答 0