动态绑定DataGrid删除行的问题

十月的雨1 2010-11-09 02:41:01
删除事件触发不了,望大家指教指教。

后台
 

BoundColumn bc_sandid = new BoundColumn();
bc_sandid.DataField = "SandID";
bc_sandid.Visible = false;
dgSandPlayList.Columns.Add(bc_sandid);

HyperLinkColumn hlc_name = new HyperLinkColumn();
hlc_name.HeaderText = "用户名";
hlc_name.DataTextField = "UserName";
hlc_name.DataNavigateUrlField = "OwnerID";
hlc_name.DataNavigateUrlFormatString = "~/member_info.aspx?id={0}";
DataGrid1.Columns.Add(hlc_name);

ButtonColumn bc_del = new ButtonColumn();
bc_del.CommandName = "Delete";
bc_del.Text = "删除";
DataGrid1.Columns.Add(bc_del);

DataGrid1.DataSource = dt;
DataGrid1.DataBind();

protected void DataGrid1_DeleteCommand(object source, DataGridCommandEventArgs e)
{
string sql =
string.Format("DELETE FROM Sand WHERE SandID={0}", e.Item.Cells[0].Text);
Tools.ExecuteNonQuery(sql);
AspNetPager1.CurrentPageIndex = 1;
GetData();
}

前台

<asp:DataGrid ID="DataGrid1" runat="server" AutoGenerateColumns="False" ondeletecommand="dgSandPlayList_DeleteCommand"></asp:DataGrid>
...全文
163 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
指间的风 2010-11-09
  • 打赏
  • 举报
回复
sp1234 呵呵,不是。
指间的风 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 baysos 的回复:]
您是SP大哥的弟弟么?
[/Quote]

SP是谁?
指间的风 2010-11-09
  • 打赏
  • 举报
回复


<%@ Page Language="C#" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<script runat="server">

// The Cart and CartView objects temporarily store the data source
// for the DataGrid control while the page is being processed.
DataTable Cart = new DataTable();
DataView CartView;

void Page_Load(Object sender, EventArgs e)
{

// With a database, use an select query to retrieve the data. Because
// the data source in this example is an in-memory DataTable, retrieve
// the data from session state if it exists; otherwise, create the data
// source.
GetSource();

// The DataGrid control maintains state between posts to the server;
// it only needs to be bound to a data source the first time the page
// is loaded or when the data source is updated.
if (!IsPostBack)
{

BindGrid();

}

}

void ItemsGrid_Edit(Object sender, DataGridCommandEventArgs e)
{

// Set the EditItemIndex property to the index of the item clicked
// in the DataGrid control to enable editing for that item. Be sure
// to rebind the DateGrid to the data source to refresh the control.
ItemsGrid.EditItemIndex = e.Item.ItemIndex;
BindGrid();

}

void ItemsGrid_Cancel(Object sender, DataGridCommandEventArgs e)
{

// Set the EditItemIndex property to -1 to exit editing mode.
// Be sure to rebind the DateGrid to the data source to refresh
// the control.
ItemsGrid.EditItemIndex = -1;
BindGrid();

}

void ItemsGrid_Update(Object sender, DataGridCommandEventArgs e)
{

// Retrieve the text boxes that contain the values to update.
// For bound columns, the edited value is stored in a TextBox.
// The TextBox is the 0th control in a cell's Controls collection.
// Each cell in the Cells collection of a DataGrid item represents
// a column in the DataGrid control.
TextBox qtyText = (TextBox)e.Item.Cells[3].Controls[0];
TextBox priceText = (TextBox)e.Item.Cells[4].Controls[0];

// Retrieve the updated values.
String item = e.Item.Cells[2].Text;
String qty = qtyText.Text;
String price = priceText.Text;

DataRow dr;

// With a database, use an update command to update the data.
// Because the data source in this example is an in-memory
// DataTable, delete the old row and replace it with a new one.

// Remove the old entry and clear the row filter.
CartView.RowFilter = "Item='" + item + "'";
if (CartView.Count > 0)
{
CartView.Delete(0);
}
CartView.RowFilter = "";

// ***************************************************************
// Insert data validation code here. Be sure to validate the
// values entered by the user before converting to the appropriate
// data types and updating the data source.
// ***************************************************************

// Add the new entry.
dr = Cart.NewRow();
dr[0] = Convert.ToInt32(qty);
dr[1] = item;

// If necessary, remove the '$' character from the price before
// converting it to a Double.
if(price[0] == '$')
{
dr[2] = Convert.ToDouble(price.Substring(1));
}
else
{
dr[2] = Convert.ToDouble(price);
}

Cart.Rows.Add(dr);

// Set the EditItemIndex property to -1 to exit editing mode.
// Be sure to rebind the DateGrid to the data source to refresh
// the control.
ItemsGrid.EditItemIndex = -1;
BindGrid();

}

void BindGrid()
{

// Set the data source and bind to the Data Grid control.
ItemsGrid.DataSource = CartView;
ItemsGrid.DataBind();

}

void GetSource()
{

// For this example, the data source is a DataTable that is stored
// in session state. If the data source does not exist, create it;
// otherwise, load the data.
if (Session["ShoppingCart"] == null)
{

// Create the sample data.
DataRow dr;

// Define the columns of the table.
Cart.Columns.Add(new DataColumn("Qty", typeof(Int32)));
Cart.Columns.Add(new DataColumn("Item", typeof(String)));
Cart.Columns.Add(new DataColumn("Price", typeof(Double)));

// Store the table in session state to persist its values
// between posts to the server.
Session["ShoppingCart"] = Cart;

// Populate the DataTable with sample data.
for (int i = 1; i <= 9; i++)
{
dr = Cart.NewRow();
if (i % 2 != 0)
{
dr[0] = 2;
}
else
{
dr[0] = 1;
}
dr[1] = "Item " + i.ToString();
dr[2] = (1.23 * (i + 1));
Cart.Rows.Add(dr);
}

}

else
{

// Retrieve the sample data from session state.
Cart = (DataTable)Session["ShoppingCart"];

}

// Create a DataView and specify the field to sort by.
CartView = new DataView(Cart);
CartView.Sort="Item";

return;

}

void ItemsGrid_Command(Object sender, DataGridCommandEventArgs e)
{

switch(((LinkButton)e.CommandSource).CommandName)
{

case "Delete":
DeleteItem(e);
break;

// Add other cases here, if there are multiple ButtonColumns in
// the DataGrid control.

default:
// Do nothing.
break;

}

}

void DeleteItem(DataGridCommandEventArgs e)
{

// e.Item is the table row where the command is raised. For bound
// columns, the value is stored in the Text property of a TableCell.
TableCell itemCell = e.Item.Cells[2];
string item = itemCell.Text;

// Remove the selected item from the data source.
CartView.RowFilter = "Item='" + item + "'";
if (CartView.Count > 0)
{
CartView.Delete(0);
}
CartView.RowFilter = "";

// Rebind the data source to refresh the DataGrid control.
BindGrid();

}

</script>

<head runat="server">
<title>DataGrid Editing Example</title>
</head>
<body>

<form id="form1" runat="server">

<h3>DataGrid Editing Example</h3>

<asp:DataGrid id="ItemsGrid"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
OnEditCommand="ItemsGrid_Edit"
OnCancelCommand="ItemsGrid_Cancel"
OnUpdateCommand="ItemsGrid_Update"
OnItemCommand="ItemsGrid_Command"
AutoGenerateColumns="false"
runat="server">

<HeaderStyle BackColor="#aaaadd">
</HeaderStyle>

<Columns>

<asp:EditCommandColumn
EditText="Edit"
CancelText="Cancel"
UpdateText="Update"
HeaderText="Edit item">

<ItemStyle Wrap="False">
</ItemStyle>

<HeaderStyle Wrap="False">
</HeaderStyle>

</asp:EditCommandColumn>

<asp:ButtonColumn
HeaderText="Delete item"
ButtonType="LinkButton"
Text="Delete"
CommandName="Delete"/>

<asp:BoundColumn HeaderText="Item"
ReadOnly="True"
DataField="Item"/>

<asp:BoundColumn HeaderText="Quantity"
DataField="Qty"/>

<asp:BoundColumn HeaderText="Price"
DataField="Price"
DataFormatString="{0:c}"/>

</Columns>

</asp:DataGrid>

</form>

</body>
</html>

baysos 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 freesarge 的回复:]
简单看了一下,是没有触发事件的元素

需要加上这个 <asp:ButtonColumn
HeaderText="Delete item"
ButtonType="LinkButton"
Text="Delete"
CommandName="Delete"/>
[/Quote]
您是SP大哥的弟弟么?
指间的风 2010-11-09
  • 打赏
  • 举报
回复
简单看了一下,是没有触发事件的元素

需要加上这个 <asp:ButtonColumn
HeaderText="Delete item"
ButtonType="LinkButton"
Text="Delete"
CommandName="Delete"/>

指间的风 2010-11-09
  • 打赏
  • 举报
回复
能把完整的代码贴一下吗,

呵呵,有点懒。

想直接复制到VS里找错误,你看怎么样。
指间的风 2010-11-09
  • 打赏
  • 举报
回复
现在还不是不好使吗?
十月的雨1 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 freesarge 的回复:]
ondeletecommand="dgSandPlayList_DeleteCommand"


DataGrid1_DeleteCommand(object source, DataGridCommandEventArgs e)

名字不一样也可以吗?看来我OUT了。
[/Quote]
这个不是问题所在,是我发帖时没改过来
指间的风 2010-11-09
  • 打赏
  • 举报
回复
这是一个函数,
protected void DataGrid1_DeleteCommand(object source, DataGridCommandEventArgs e)
{
string sql =
string.Format("DELETE FROM Sand WHERE SandID={0}", e.Item.Cells[0].Text);
Tools.ExecuteNonQuery(sql);
AspNetPager1.CurrentPageIndex = 1;
GetData();
}

需要控件将特定的事件委托到上边的那个函数上才行。
<asp:DataGrid ID="DataGrid1" runat="server" AutoGenerateColumns="False" ondeletecommand="dgSandPlayList_DeleteCommand"></asp:DataGrid>
think_huang 2010-11-09
  • 打赏
  • 举报
回复
楼主你前台调用的方法错误了 dgSandPlayList_DeleteCommand!=DataGrid1_DeleteCommand
persuit666 2010-11-09
  • 打赏
  • 举报
回复
顶楼上,哈哈哈哈
指间的风 2010-11-09
  • 打赏
  • 举报
回复
ondeletecommand="dgSandPlayList_DeleteCommand"


DataGrid1_DeleteCommand(object source, DataGridCommandEventArgs e)

名字不一样也可以吗?看来我OUT了。

62,271

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧