DataGrid.DataKeyField如何设置多个关键字
我在做删除DataGrid的记录时,由于有多行的数据一样(只有某个字段不一样),而我只想删除所选的一行,该怎么做啊? 
    能不能做到两行完全一样,选那行的删除就删哪行啊?
------解决方案--------------------另外你的数据库中如果没有一个ID列的话,那许多操作都不是很好处理。 
 建议加个标识列
------解决方案--------------------能不能做到两行完全一样,选那行的删除就删哪行啊?   
 ———————————————— 
 1。 
 呵呵,你想的美美哦,数据库中两行列字段完全怎么删除呢?这样的数据有意义嘛? 
 希望,你指的是 复合主键(由两个列以上组成的主键)   
 2。 
 DataGrid.DataKeyField 无法设置多个关键字,请选择使用 GridView 
 GridView.DataKeyNames 可以支持多个关键字   
 3. 
 若你 1.x 版本,又是复合主键,希望 DataGrid 能区分行只有变通设置了,如下:   
  <%@ Page Language= "C# " %>  
  <%@ Import Namespace= "System.Data " %>    
  <%-- http://community.csdn.net/Expert/topic/5590/5590070.xml?temp=.2358057 --%>    
  <!DOCTYPE html PUBLIC  "-//W3C//DTD XHTML 1.0 Transitional//EN "  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">    
  <script runat= "server ">    
     void Page_Load(object sender, EventArgs e) 
     { 
         if (!IsPostBack) {   
             // 首次加载数据一定要放在 !IsPostBack 内, 
             // 避免回发的时候再次绑定数据,覆盖复选框状态 
             LoadProductData();             
         } 
     }   
     void btnSubmit_Click(object sender, EventArgs e) 
     { 
         ArrayList selectedProductIdList = new ArrayList(); 
         ArrayList selectedCategoryIdList = new ArrayList(); 
         foreach (DataGridItem item in grdPro.Items) { 
             CheckBox chkItem = item.FindControl( "chkItem ") as CheckBox; 
             HtmlInputHidden fldProCat = item.FindControl( "fldProCat ") as HtmlInputHidden; 
             if (chkItem != null && chkItem.Checked) { 
                 /* NOTE: 
                  * 当然你可以在数据源中添加一个列,此列的值为 ProductId$CategoryId, 
                  * 然后将此列作为键绑定到 DataGrid.DatKeyField ,使用如下代码解析 
                  * string[] strArr = ((string)grdPro.DataKeys[item.ItemIndex]).split( '$ '); 
                  * int productId = int.Parse(strArr[0]); 
                  * int categorytId = int.Parse(strArr[1]); 
                  */ 
                 string[] strArr = fldProCat.Value.Split( '$ '); 
                 selectedProductIdList.Add(int.Parse(strArr[0])); 
                 selectedCategoryIdList.Add(int.Parse(strArr[1])); 
                 // add your more codes             
                 // ... 
                 Response.Write(fldProCat.Value +  ",  "); 
             }             
         }        
     }           
     void LoadProductData() 
     { 
         grdPro.DataSource = CreateProductTable(); 
         grdPro.DataBind();         
     }     
     #region sample data          
     static DataTable CreateProductTable() 
     { 
         DataTable tbl = new DataTable( "Products ");   
         tbl.Columns.Add( "ProductID ", typeof(int)); 
         tbl.Columns.Add( "ProductName ", typeof(string)); 
         tbl.Columns.Add( "CategoryID ", typeof(int)); 
         DataRow row = tbl.NewRow(); 
         row[0] = 1; 
         row[1] =  "Chai "; 
         row[2] = 1; 
         tbl.Rows.Add(row);   
         row = tbl.NewRow(); 
         row[0] = 2; 
         row[1] =  "Chang "; 
         row[2] = 1; 
         tbl.Rows.Add(row);   
         row = tbl.NewRow(); 
         row[0] = 3; 
         row[1] =  "Aniseed Syrup "; 
         row[2] = 2; 
         tbl.Rows.Add(row);   
         row = tbl.