看到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();
       }

解决方案 »

  1.   

    TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0];  //?   修改的时候让该行第3列和第4列变成text文本框
    TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];//? 
    String item = e.Item.Cells[1].Text;//?    item赋值为该行第2列的内容
    CartView.RowFilter   好像是获取筛选器
      

  2.   


          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(); 
          }
      

  3.   

    要注释?
    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(); 
          }
      

  4.   

    if (CartView.Count > 0)这行代码相当于判断,是否过滤到了数据
      

  5.   


    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(); 
          }
      

  6.   

    TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0];  //当前的第三个单元格的控件强转成TextBox 
              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 = "";//清空过滤
      

  7.   

    [code=C#]      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];//当前的第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(); 
          }
           
      

  8.   

    我真郁闷  今天 脑袋晕晕的   发了两次都没有发 整齐第一次忘了加  代码管理,第二次加了一半      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];//当前的第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(); 
          } 
    就不信发不成功