private DataTable GetTable()
{
DataTable dt = Session["Tables"] as DataTable;
  if (dt == null)
  {
    dt = new DataTable();
    dt.Columns.Add("DeliveryAdress", typeof(string));
    dt.Columns.Add("BillNo", typeof(string));
    dt.PrimaryKey = new DataColumn[] { dt.Columns["BillNo"] };
    Session["Tables"] = dt;   }   return dt;
}
DataTable table = this.GetTable();
DataRow dr = table.Rows.Find(this.gvEnv.DataKeys[e.RowIndex].Value.ToString());
調用方法咋一直提示表沒有主鍵
求解。。

解决方案 »

  1.   

    dt.PrimaryKey = new DataColumn[] { dt.Columns["BillNo"] };
    这句加断点,测试下。
      

  2.   


     dt.PrimaryKey = new DataColumn[] { dt.Columns["BillNo"] };这一句加了。。还报这个?你数据库中有主键吗?
      

  3.   

    Billno非主鍵,但不能爲空地。
      

  4.   

    幹啥老關注數據庫有木主鍵。。
    從數據庫讀取數據出來,billNo爲非空唯一的編號
    因此,在Datatable中作爲主鍵填充
      

  5.   

    如果dt==null
    dt.PrimaryKey = new DataColumn[] { dt.Columns["BillNo"] };//这里就是空
      

  6.   


    但是在DataRow dr = table.Rows.Find(this.gvEnv.DataKeys[e.RowIndex].Value.ToString());
    之前有方法讀取數據
      

  7.   

    DataRow dr = table.Rows.Find(this.gvEnv.DataKeys[e.RowIndex].Value.ToString());
    看gvEnv这个控件是否绑定主键.
      

  8.   


    gvEnv.DataKeyNames = new string[] { "BillNo" };
      

  9.   

    this.gvEnv.DataKeys[e.RowIndex].Value.ToString());
    這個是有值地。
      

  10.   

    哦,明白了
    看你的代码:DataTable dt = Session["Tables"] as DataTable;
      if (dt == null)
      {
        dt = new DataTable();
        dt.Columns.Add("DeliveryAdress", typeof(string));
        dt.Columns.Add("BillNo", typeof(string));
        dt.PrimaryKey = new DataColumn[] { dt.Columns["BillNo"] };
        Session["Tables"] = dt;   }   return dt;
    }
    只有dt为空的时候你才给dt设置了主键.
      

  11.   

    DataTable dt = Session["Tables"] as DataTable;
    应该是bt不为空的时候,dt没有设置主键,看看你Session中Tables的设置。