我在DataGrid里加入两个ImageButton 保存和删除,设置了它们的属性 分别为CommandName="update" 和 CommandName="del"。如下:<asp:TemplateColumn>
<HeaderTemplate>
保存
</HeaderTemplate>
<ItemTemplate>
<asp:ImageButton id="ImagebuttonSave" runat="server"   ImageUrl="../images/save.gif" CommandName="update"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
删除
</HeaderTemplate>
<ItemTemplate>
<asp:ImageButton id="ImagebuttonDel" runat="server" ImageUrl="../images/delete.gif" CommandName="del"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateColumn>然后在后台代码中加入如下事件:
this.DataGrid2.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid2_ItemCommand);
private void DataGrid2_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{


string name = e.CommandName; 
this.lblMessage.Text = name;    // 我发现这里的name根本没有值,好象
                                      //DataGrid2.ItemCommand没有传过来,不知道怎么回事?

if(name.Equals("update"))
{
}  if(name.Equals("del"))
{


}

}因为按每行“保存”和“删除”按钮都没有反应,经检查,我发现上面的name根本没有值,就没法进行下去了,好象DataGrid2.ItemCommand没有传过来,不知道怎么回事?
是还有其它属性没设还是。?请各位高手帮忙。急!在线等谢谢先!

解决方案 »

  1.   

    具体相关代码如下:aspx中的相关代码:<asp:datagrid id=DataGrid2 runat="server" CssClass="result" BorderWidth="0px" CellSpacing="1" CellPadding="0" AutoGenerateColumns="False" AllowPaging="True" PageSize="20">
    <SelectedItemStyle CssClass="result_select"></SelectedItemStyle>
    <AlternatingItemStyle CssClass="result_content_"></AlternatingItemStyle>
    <ItemStyle CssClass="result_content"></ItemStyle>
    <HeaderStyle CssClass="result_head"></HeaderStyle>
    <Columns>
    <asp:TemplateColumn>
    <HeaderTemplate>
    材料人员标识
    </HeaderTemplate>
    <ItemTemplate>
    <asp:Label id="lblfId" runat="server" text='<%#DataBinder.Eval(Container.DataItem,"fId").ToString() %>'></asp:Label>
    </ItemTemplate>
    </asp:TemplateColumn> <asp:TemplateColumn>
    <HeaderTemplate>
    姓名
    </HeaderTemplate>
    <ItemTemplate>
    <asp:TextBox id="txtfName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"fName").ToString() %>' ></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn>
    <HeaderTemplate>
    证件号码
    </HeaderTemplate>
    <ItemTemplate>
    <asp:TextBox id="txtfIDCard" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"fIDCard").ToString() %>' ></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn>
    <HeaderTemplate>
    保存
    </HeaderTemplate>
    <ItemTemplate>
    <asp:ImageButton id="ImagebuttonSave" runat="server" ImageUrl="../images/save.gif" CommandName="update"></asp:ImageButton>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn>
    <HeaderTemplate>
    删除
    </HeaderTemplate>
    <ItemTemplate>
    <asp:ImageButton id="ImagebuttonDel" runat="server" ImageUrl="../images/delete.gif" CommandName="del"></asp:ImageButton>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns> <PagerStyle Visible="False"  NextPageText="5"  PrevPageText="6"  HorizontalAlign="Right"  ForeColor="Black" Mode="NumericPages"></PagerStyle>
    </asp:datagrid>
    aspx.cs中的相关代码:this.DataGrid2.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid2_ItemCommand);
    private void DataGrid2_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {

    string strFunitId=getUnitId();
    string strFGlidNo=getGlidNo();
    string name = e.CommandName; 
    this.lblMessage.Text = name; // 我发现这里的name根本没有值,好象DataGrid2.ItemCommand没有传过来,不知道怎么回事?

    if(name.Equals("update"))
    {
    DataGrid2.SelectedIndex = e.Item.ItemIndex;
    Label LB = (Label)DataGrid2.Items[DataGrid2.SelectedIndex].FindControl("lblfId");
    TextBox txt1 = (TextBox)DataGrid2.Items[DataGrid2.SelectedIndex].FindControl("txtfName");
    TextBox txt2 = (TextBox)DataGrid2.Items[DataGrid2.SelectedIndex].FindControl("txtfIDCard"); //记得还要加入身份证验证 //更新材料登记人员基本信息
    BasicPersonManagement bpm = new BasicPersonManagement();
    t_basis_personDto bdto = new t_basis_personDto();
    bdto.fPersonId = LB.Text.ToString().Trim().Substring(9);

    bdto.fIDCard = txt2.Text.ToString().Trim();

    bdto.fName = txt1.Text.ToString().Trim();

    bpm.UpdateBasisPerson(bdto);
    this.Alert("保存成功!");
    string url="UI-SD-A04-008.aspx?fUnitId=" +strFunitId+"->fGlideNO="+strFGlidNo;
    Response.Redirect(url);
    }  if(name.Equals("del"))
    {
    DataGrid2.SelectedIndex = e.Item.ItemIndex;
    Label LB = (Label)DataGrid2.Items[DataGrid2.SelectedIndex].FindControl("lblfId");
    //删除材料登记人员信息
    MaterialRegistManagement p = new MaterialRegistManagement();
    t_bmaterial_personDto dto = new t_bmaterial_personDto();
    dto.fId = LB.Text.ToString().Trim();

    p.DelBmaterialPerson(dto);

    //删除材料登记人员基本信息 BasicPersonManagement bm = new BasicPersonManagement();
    t_basis_personDto bdto = new t_basis_personDto();
    dto.fPersonId = LB.Text.ToString().Trim().Substring(9);
    bm.DelBasicMaterialPerson(bdto);
    this.Alert("删除成功!"); string url="UI-SD-A04-008.aspx?fUnitId=" +strFunitId+"->fGlideNO="+strFGlidNo;
    Response.Redirect(url);

    }


    }
      

  2.   

    前台不要使用模版列 if( e.CommandName== "更新" )
    {}
    if( e.CommandName == "删除" )
    {}
      

  3.   

    <asp:ButtonColumn Text="删除" CommandName="删除">
      

  4.   

    switch(((ImageButton)e.CommandSource).CommandName)
      

  5.   

    例子
    <%@ Page Language="C#" AutoEventWireup="True" Debug="true" %>
    <%@ Import Namespace="System.Data" %>
    <html>
    <script runat="server">
          DataTable Cart = new DataTable();
          DataView CartView;    
          void Page_Load(Object sender, EventArgs e) 
          { 
             GetSource();     
             if (!IsPostBack)
             {
                BindGrid();         }
                       
          }
     
     
         
          void BindGrid() 
          {
             ItemsGrid.DataSource = CartView;
             ItemsGrid.DataBind();      }      void GetSource()
          {
                DataRow dr;     
                Cart.Columns.Add(new DataColumn("Qty", typeof(Int32)));
                Cart.Columns.Add(new DataColumn("Item", typeof(String)));
                Cart.Columns.Add(new DataColumn("Price", typeof(Double)));
                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);
                }        
     
             CartView = new DataView(Cart);
             CartView.Sort="Item";         return;      }      void ItemsGrid_Command(Object sender, DataGridCommandEventArgs e)
          { string a = ((ImageButton)e.CommandSource).CommandName;
    Response.Write(a);
             switch(a)
             {
                case "del":
                
                break;            default:
                   // Do nothing.
                   break;         }      } 
    </script>
    <body>
    <form runat="server" ID="Form1">
    <asp:DataGrid id="ItemsGrid" BorderColor="black" BorderWidth="1" CellPadding="3" OnItemCommand="ItemsGrid_Command"
    AutoGenerateColumns="false" runat="server">
    <Columns>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:ImageButton id="ImagebuttonSave" runat="server" ImageUrl="../images/save.gif" CommandName="update"></asp:ImageButton>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:ImageButton id="ImagebuttonDel" runat="server" ImageUrl="../images/delete.gif" CommandName="del"></asp:ImageButton>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid>
    </form>
    </body>
    </html>