C# DataGridView不进入编辑模式

C# DataGridView不进入编辑模式,c#,winforms,datagridview,edit,C#,Winforms,Datagridview,Edit,我以这种方式填充DataGridView: DataTable dt = new DataTable(); using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.MARKETConnectionString)) { conn.Open(); String SQL = @"select INN, Idx, Adr, 'P' as Src from AdrP where Idx is

我以这种方式填充DataGridView:

DataTable dt = new DataTable();

using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.MARKETConnectionString))
{
     conn.Open();

     String SQL = @"select INN, Idx, Adr, 'P' as Src from AdrP where Idx is null 
                    union all
                    select INN, Idx, Adr, 'K' as Src  from AdrK where Idx is null";
     SqlCommand cmd = new SqlCommand(SQL, conn);
     var RD = cmd.ExecuteReader();
     if (RD.HasRows) dt.Load(RD);
     dataGridView2.DataSource = dt;
}
但是DataGridView不会通过双击进入编辑模式。如果我删除SQL查询中的“Union All”,则双击可以正常工作,从而在编辑模式下切换DataGridView。但我需要从两个具有Union的表中进行选择

我尝试在DataGridView双击事件中调用dataGridView2.BeginEdittrue。但这没有帮助


使用从两个表中选择的数据源编辑DataGridView的正确方法是什么?

在这种情况下,不要使用DataReader。请改用适配器:

using (SqlDataAdapter adp = new SqlDataAdapter(SQL, conn)) {
  adp.Fill(dt);
}

谢谢它很好用。但是为什么DataReader在这种情况下不能正常工作?@gouph reader知道union不是一个可编辑的表,所以它在内部将其标记为只读或类似的东西。适配器填充方法没有做出这样的假设。当然,要保存数据,您必须自己提供自定义机制,因为DataTable不知道数据来自何处。