日期:2014-05-18  浏览次数:20609 次

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.