看到MSDN里有个例子有点不懂<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ 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 language="C#" runat="server">
DataTable Cart = new DataTable();
DataView CartView;
ICollection CreateDataSource()
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double))); for (int i = 0; i < 3; i++)
{
dr = dt.NewRow();
dr[0] = i;
dr[1] = (Double)i * 1.23;
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
void Page_Load(Object sender, EventArgs e)
{
DataRow dr;
if (Session["ShoppingCart"] == null)
{
Cart.Columns.Add(new DataColumn("Qty", typeof(String)));
Cart.Columns.Add(new DataColumn("Item", typeof(String)));
Cart.Columns.Add(new DataColumn("Price", typeof(String)));
Session["ShoppingCart"] = Cart;
for (int i = 1; i <= 4; 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)).ToString();
Cart.Rows.Add(dr); }
}
else
Cart = (DataTable)Session["ShoppingCart"];
CartView = new DataView(Cart);
CartView.Sort = "Item";
if (!IsPostBack)
BindGrid();
}
private void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e)
{
MyDataGrid.EditItemIndex = e.Item.ItemIndex;
BindGrid();
}
private void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e)
{
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
private void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
{
TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0];
TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];
String item = e.Item.Cells[1].Text;
String qty = qtyText.Text;
String price = priceText.Text;
DataRow dr;
CartView.RowFilter = "Item'" + item + "'";
if (CartView.Count > 0)
CartView.Delete(0);
CartView.RowFilter = ""; dr = Cart.NewRow();
dr[0] = qty;
dr[1] = item;
dr[2] = price;
Cart.Rows.Add(dr);
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
void BindGrid()
{
MyDataGrid.DataSource = CartView;
MyDataGrid.DataBind();
}
</script>
<body>
<form id="form1" runat="server">
<h3>BoundColumn Example</h3>
<b>Product List</b>
<asp:DataGrid ID="MyDataGrid" runat="server"
BorderColor="black"
BorderWidth="1" Font-Size="8pt"
CellPadding="3" Font-Names="Verdana"
OnEditCommand="MyDataGrid_Edit"
OnCancelCommand="MyDataGrid_Cancel"
OnUpdateCommand="MyDataGrid_Update"
AutoGenerateColumns="false" Height="146px" Width="257px"
>
<HeaderStyle BackColor="#AAAADD" />
<EditItemStyle BackColor="Yellow" />
<Columns>
<asp:EditCommandColumn
EditText="Edit"
CancelText="Cancel"
UpdateText="Update"
HeaderText="Edit Command Column">
<ItemStyle Wrap="false" />
<HeaderStyle Wrap="false" />
</asp:EditCommandColumn>
<asp:BoundColumn HeaderText="Item" ReadOnly="true"
DataField="Item"></asp:BoundColumn>
<asp:BoundColumn HeaderText="Quantity" DataField="Qty">
</asp:BoundColumn>
<asp:BoundColumn HeaderText="Price" DataField="Price"></asp:BoundColumn>
</Columns>
</asp:DataGrid> <div>
</div>
</form>
</body>
</html>主要是下面这个函数中打问号的地方
private void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
{
TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0]; //?
TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];//?
String item = e.Item.Cells[1].Text;//?
String qty = qtyText.Text;
String price = priceText.Text;
DataRow dr;
CartView.RowFilter = "Item'" + item + "'";//?
if (CartView.Count > 0)//?
CartView.Delete(0);//?
CartView.RowFilter = "";//? dr = Cart.NewRow();
dr[0] = qty;
dr[1] = item;
dr[2] = price;
Cart.Rows.Add(dr);
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
<%@ 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 language="C#" runat="server">
DataTable Cart = new DataTable();
DataView CartView;
ICollection CreateDataSource()
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double))); for (int i = 0; i < 3; i++)
{
dr = dt.NewRow();
dr[0] = i;
dr[1] = (Double)i * 1.23;
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
void Page_Load(Object sender, EventArgs e)
{
DataRow dr;
if (Session["ShoppingCart"] == null)
{
Cart.Columns.Add(new DataColumn("Qty", typeof(String)));
Cart.Columns.Add(new DataColumn("Item", typeof(String)));
Cart.Columns.Add(new DataColumn("Price", typeof(String)));
Session["ShoppingCart"] = Cart;
for (int i = 1; i <= 4; 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)).ToString();
Cart.Rows.Add(dr); }
}
else
Cart = (DataTable)Session["ShoppingCart"];
CartView = new DataView(Cart);
CartView.Sort = "Item";
if (!IsPostBack)
BindGrid();
}
private void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e)
{
MyDataGrid.EditItemIndex = e.Item.ItemIndex;
BindGrid();
}
private void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e)
{
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
private void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
{
TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0];
TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];
String item = e.Item.Cells[1].Text;
String qty = qtyText.Text;
String price = priceText.Text;
DataRow dr;
CartView.RowFilter = "Item'" + item + "'";
if (CartView.Count > 0)
CartView.Delete(0);
CartView.RowFilter = ""; dr = Cart.NewRow();
dr[0] = qty;
dr[1] = item;
dr[2] = price;
Cart.Rows.Add(dr);
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
void BindGrid()
{
MyDataGrid.DataSource = CartView;
MyDataGrid.DataBind();
}
</script>
<body>
<form id="form1" runat="server">
<h3>BoundColumn Example</h3>
<b>Product List</b>
<asp:DataGrid ID="MyDataGrid" runat="server"
BorderColor="black"
BorderWidth="1" Font-Size="8pt"
CellPadding="3" Font-Names="Verdana"
OnEditCommand="MyDataGrid_Edit"
OnCancelCommand="MyDataGrid_Cancel"
OnUpdateCommand="MyDataGrid_Update"
AutoGenerateColumns="false" Height="146px" Width="257px"
>
<HeaderStyle BackColor="#AAAADD" />
<EditItemStyle BackColor="Yellow" />
<Columns>
<asp:EditCommandColumn
EditText="Edit"
CancelText="Cancel"
UpdateText="Update"
HeaderText="Edit Command Column">
<ItemStyle Wrap="false" />
<HeaderStyle Wrap="false" />
</asp:EditCommandColumn>
<asp:BoundColumn HeaderText="Item" ReadOnly="true"
DataField="Item"></asp:BoundColumn>
<asp:BoundColumn HeaderText="Quantity" DataField="Qty">
</asp:BoundColumn>
<asp:BoundColumn HeaderText="Price" DataField="Price"></asp:BoundColumn>
</Columns>
</asp:DataGrid> <div>
</div>
</form>
</body>
</html>主要是下面这个函数中打问号的地方
private void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
{
TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0]; //?
TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];//?
String item = e.Item.Cells[1].Text;//?
String qty = qtyText.Text;
String price = priceText.Text;
DataRow dr;
CartView.RowFilter = "Item'" + item + "'";//?
if (CartView.Count > 0)//?
CartView.Delete(0);//?
CartView.RowFilter = "";//? dr = Cart.NewRow();
dr[0] = qty;
dr[1] = item;
dr[2] = price;
Cart.Rows.Add(dr);
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];//?
String item = e.Item.Cells[1].Text;//? item赋值为该行第2列的内容
CartView.RowFilter 好像是获取筛选器
private void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
{
TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0]; //? 读取第3个单元格里的TextBox控件值
TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];//? 读取第4个单元格里的TextBox控件值 String item = e.Item.Cells[1].Text;//? //读取第2个单元格里的值 String qty = qtyText.Text;
String price = priceText.Text;
DataRow dr;
CartView.RowFilter = "Item='" + item + "'";//? 这里少了一个=号,一种数据过滤方式,类似SQL里的where条件
if (CartView.Count > 0)//?
CartView.Delete(0);//? //如果CartView里有数据,就删除第一个.
CartView.RowFilter = "";//? //取消过滤 dr = Cart.NewRow();
dr[0] = qty;
dr[1] = item;
dr[2] = price;
Cart.Rows.Add(dr);
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
private void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
{
TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0]; //把当前行第三列的第一个控件转成(获取为)TextBox
TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];//把当前行第四列的第一个控件转成(获取为)TextBox
String item = e.Item.Cells[1].Text;//得到当前行第二列的值
String qty = qtyText.Text;
String price = priceText.Text;
DataRow dr;
CartView.RowFilter = "Item'" + item + "'";//设置CartView的过滤条件
if (CartView.Count > 0)//在应用 RowFilter 和 RowStateFilter 之后,获取 DataView 中记录的数量,也就是获取过滤后的得到的数据数,这行代码2楼注释的不对
CartView.Delete(0);//删除索引值为0的记录
CartView.RowFilter = "";//过滤条件置空 dr = Cart.NewRow();
dr[0] = qty;
dr[1] = item;
dr[2] = price;
Cart.Rows.Add(dr);
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
private void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
{
TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0]; //把当前行第三列的第一个控件强制转成TextBox
TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];//把当前行第四列的第一个控件转成TextBox
String item = e.Item.Cells[1].Text;//得到当前行第二列的值
String qty = qtyText.Text;
String price = priceText.Text;
DataRow dr;
CartView.RowFilter = "Item'" + item + "'";//设置CartView的过滤条件
if (CartView.Count > 0)//在应用 RowFilter 和 RowStateFilter 之后,获取 DataView 中记录的数量,也就是获取过滤后的得到的数据数,这行代码2楼注释的不对
CartView.Delete(0);//删除索引值为0的记录
CartView.RowFilter = "";//过滤条件置空 dr = Cart.NewRow();
dr[0] = qty;
dr[1] = item;
dr[2] = price;
Cart.Rows.Add(dr);
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];//当前的第4个单元格的控件强转成TextBox String item = e.Item.Cells[1].Text;//取第二个单元格的值,第二个单元格应该是不可编辑的 String qty = qtyText.Text;
String price = priceText.Text;
DataRow dr;
CartView.RowFilter = "Item'" + item + "'";//过滤 if (CartView.Count > 0)//判断行数 CartView.Delete(0);//删除第一行数据 CartView.RowFilter = "";//清空过滤
{
TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0]; //当前的第三个单元格的控件强转成TextBox
TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];//当前的第4个单元格的控件强转成
String item = e.Item.Cells[1].Text;//取第二个单元格的值,第二个单元格应该是不可编辑的 [/color]
String qty = qtyText.Text;
String price = priceText.Text;
DataRow dr;
CartView.RowFilter = "Item'" + item + "'";//过滤
if (CartView.Count > 0)//判断行数
CartView.Delete(0);//删除第一行数据 CartView.RowFilter = "";//清空过滤 dr = Cart.NewRow();
dr[0] = qty;
dr[1] = item;
dr[2] = price;
Cart.Rows.Add(dr);
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
{
TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0]; //当前的第三个单元格的控件强转成TextBox TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];//当前的第4个单元格的控件强转成
String item = e.Item.Cells[1].Text;//取第二个单元格的值,第二个单元格应该是不可编辑的 [/color]
String qty = qtyText.Text;
String price = priceText.Text;
DataRow dr;
CartView.RowFilter = "Item'" + item + "'";//过滤
if (CartView.Count > 0)//判断行数
CartView.Delete(0);//删除第一行数据 CartView.RowFilter = "";//清空过滤 dr = Cart.NewRow();
dr[0] = qty;
dr[1] = item;
dr[2] = price;
Cart.Rows.Add(dr);
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
就不信发不成功