这几天照着例子做程序 , 有两个小问题,一直解决不了 1.
我在 DataGrid_List_ItemDataBound 写了以下程序 ,但是他只对我列表页中的第一行起作用, 其他行就不行.
switch( e.Item.ItemType )
{
case ListItemType.Item:  //  列表控件中的项
{
e.Item.Attributes.Add("onmouseover","this.className='TableRowMouseOver'");
e.Item.Attributes.Add("onmouseout","this.className='TableRow'");
break; 
}
}
(其实刚开始的时候是可以用的,不来也不知道为什么就不行了.)2.<asp:LinkButton id="DeleteButton" runat="server" CssClass="ActionLink" CommandName="Delete">删除</asp:LinkButton>
但在DataGrid_List_ItemCommand里好象没有响应

解决方案 »

  1.   

    代码如下
    //==================================================================
    // SysAdminUser_DataGrid.ascx
    //==================================================================
    <%@ Control Language="c#" AutoEventWireup="false" Codebehind="SysAdminUser_DataGrid.ascx.cs" Inherits="ReallyNet.Web.SystemAdmin.Modules.SysAdminUser.SysAdminUser_DataGrid" EnableViewState="false" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" debug="True"%>
    <HTML>
    <HEAD>
    <title>SysAdminUser</title>
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <LINK href="../../CSS/List.css" type="text/css" rel="stylesheet">
    </HEAD>
    <body scroll="no" MS_POSITIONING="FlowLayout">
    <form id="Form1" method="post" runat="server">
    <table cellSpacing="0" cellPadding="0" width="98%" align="center" border="0">
    <tr>
    <td colSpan="2" height="34"><table cellSpacing="0" cellPadding="0" width="100%" align="center" border="0">
    <tr>
    <td colSpan="3" height="7"></td>
    </tr>
    <tr>
    <td width="40"><IMG height="27" src="../../Images/Opration/title_work.gif" width="40"></td>
    <td background="../../Images/Opration/title_bg.gif"><table cellSpacing="0" cellPadding="0" width="100%" border="0">
    <tr>
    <td class="ModuleTitle" id="ModuleTitle" runat="server"></td>
    <td class="ModuleToolbar" id="ModuleToolbar" align="right" runat="server"></td>
    </tr>
    </table>
    </td>
    <td width="10"><IMG height="27" src="../../Images/Opration/title_back.gif" width="10"></td>
    </tr>
    </table>
    </td>
    </tr>
    <tr>
    <td class="ListTable" vAlign="top" colSpan="2"><asp:datagrid id="DataGrid_List" runat="server" AutoGenerateColumns="False" width="100%" cellPadding="2"
    cellSpacing="1" height="100%" CssClass="ListContentTable" BorderWidth="0px" ShowFooter="True" GridLines="None" PageSize="16" DataKeyField="UserID" DataSource="<%# ItemList %>">
    <ItemStyle CssClass="TableRow"></ItemStyle>
    <HeaderStyle HorizontalAlign="Center" CssClass="TableHeader"></HeaderStyle>
    <FooterStyle CssClass="TableFooter"></FooterStyle>
    <Columns>
    <asp:TemplateColumn HeaderText="用户帐号">
    <ItemStyle CssClass="ListTD2"></ItemStyle>
    <ItemTemplate>
    <asp:HyperLink id="DisplayLink" runat="server" CssClass="DisplayLink">
    <%# DataBinder.Eval (Container.DataItem,"UserID")%>
    </asp:HyperLink>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="操作">
    <HeaderStyle Width="80px"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <asp:LinkButton id="DeleteButton" runat="server" CssClass="ActionLink" CommandName="Delete">删除</asp:LinkButton>
    |
    <asp:HyperLink id=ModifyLink runat="server" CssClass="ActionLink" NavigateUrl='<%# DataBinder.Eval (Container.DataItem,"UserID","../../Program/AdminIndex/SysAdminUser.aspx?UserAction=ModifyAction&amp;UserID={0}")%>'>编辑</asp:HyperLink>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    <PagerStyle Visible="False"></PagerStyle>
    </asp:datagrid>
    </td>
    </tr>
    </table>
    <asp:Label id="lbShowPage" runat="server"></asp:Label>
    </form>
    </body>
    </HTML>
      

  2.   

    //==================================================================
    // SysAdminUser_DataGrid.ascx.cs
    //==================================================================
    namespace ReallyNet.Web.SystemAdmin.Modules.SysAdminUser
    {
    using System;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls; using ReallyNet.Common.Data;
    using ReallyNet.BusinessFacade;
    using ReallyNet.SystemFramework;
    using ReallyNet.Common; using System.Text;
    using System.Collections;
    using System.Web.UI; /// <summary>
    /// SysAdminUser_DataGrid 的摘要说明。
    /// </summary>
    public class SysAdminUser_DataGrid : ModuleBase 
    { protected System.Web.UI.WebControls.DataGrid DataGrid_List;
    protected System.Web.UI.HtmlControls.HtmlTableCell ModuleTitle;
    protected System.Web.UI.HtmlControls.HtmlTableCell ModuleToolbar; private const String KEY_PAGE = "iPage";  // 当前页传递参数
    private string strPage = "" ;  // 读取当前页临时变量
    private int iPage = 1; //  当前页
    private int iPageSize = 20;  //  每页记录数
    private int iRecordCount = 0;
    protected System.Web.UI.WebControls.Label lbShowPage; //  总记录数 public DataView ItemList
    {
    get
    {
    return moduleItemView;
    }
    }
    private DataView moduleItemView;
    private void Page_Load(object sender, System.EventArgs e)
    {
    //  在此处放置用户代码以初始化页面

    if(!IsPostBack)
    {
    //  绑定数据
    DataGrid_List_DataBind();
    }  } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器
    /// 修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.DataGrid_List.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid_List_ItemCommand);
    this.DataGrid_List.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid_List_ItemDataBound);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    private void DataGrid_List_DataBind()
    {
    //  提取用户提交页码
    if (Request.Form["iPage"]!=null)
    {
    strPage=(Request.Form["iPage"].ToString()).Trim(); if (strPage != String.Empty)
    {
    iPage = Int32.Parse(strPage);
    }
    }
    else
    {
    iPage = 1;
    } //  从 系统管理员 系统的公共方法中读取数据
    SysAdminUserData objUserDataSet = (new SysAdminUserSystem()).GetSysAdminUserList(iPage , iPageSize);
    iRecordCount = objUserDataSet.iRecordCount;

    moduleItemView = objUserDataSet.Tables[SysAdminUserData.SysAdminUser_TABLE].DefaultView; if (moduleItemView.Count > 0) 
    {
    //  如果有记录把读取的数据绑定到网页的控件中
    DataGrid_List.DataSource = moduleItemView;
    DataBind();
    }
    }
    //  不指定查询及排序的查询所有用户列表 [分页]
    private SysAdminUserData LoadSysAdmin_List_All_Page(int p_iPage , int p_iPageSize)
    {
    return (new SysAdminUserSystem()).GetSysAdminUserList(p_iPage , p_iPageSize);
    } private void DataGrid_List_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    switch( e.Item.ItemType )
    {
    case ListItemType.Header: //  列表控件中的页眉
    {
    break;
    }
    case ListItemType.Item:  //  列表控件中的项
    {
    e.Item.Attributes.Add("onmouseover","this.className='TableRowMouseOver'");
    e.Item.Attributes.Add("onmouseout","this.className='TableRow'"); //  退出检查
    break;  }
    case ListItemType.Footer: //  列表控件中的页脚
    {
    break;
    }
    case ListItemType.AlternatingItem:
    {
    break;
    }
    case ListItemType.EditItem:
    {
    break;
    }
    }
    } private void DataGrid_List_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    if(e.CommandName == "Delete")
    {
    //this.DeleteRow(this.grdTest.DataKeys[e.Item.ItemIndex].ToString());
    lbShowPage.Text = "DeleteButton OK";
    }
    }
    }
    }
      

  3.   

    你的表格不会一共就两行吧
    代码太多了,没仔细看
    case ListItemType.AlternatingItem应该和case ListItemType.Item一块处理,他们都是“列表控件中的项”
      

  4.   

    switch( e.Item.ItemType )
    {
    case ListItemType.Item:  //  列表控件中的项
             case ListItemType.AlternatingItem:
    {
    e.Item.Attributes.Add("onmouseover","this.className='TableRowMouseOver'");
    e.Item.Attributes.Add("onmouseout","this.className='TableRow'");
    break; 
    }
    }
      

  5.   

    在加一个
    case ListItemType.AlternatingItem:  //  列表控件中的项
    {
    e.Item.Attributes.Add("onmouseover","this.className='TableRowMouseOver'");
    e.Item.Attributes.Add("onmouseout","this.className='TableRow'");
    break; 
    }
    应该就可以了!
      

  6.   

    用if(e.item.itemtype == listitemtype.iten || e.item.itemtype == listitemtype.alternatingitem){}为好!    private void Page_Load(object sender, System.EventArgs e)
    {
    //  在此处放置用户代码以初始化页面

    if(!IsPostBack)
    {
    //  绑定数据
    DataGrid_List_DataBind();
    }  }
      如果没有特殊要求,就不要用if(!IsPostBack){}了,直接DataGrid_List_DataBind绑定吧,要求每次刷新都要绑定才能触发DataGrid_List_ItemCommand()事件
      

  7.   

    删除按钮的问题,你光有写清楚了它的CommandName是不够的.
    上面的代码没有贴出窗体设计生成器里面的内容,里面应有一句(就是要有事件委托)
    this.myGrid.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.myGrid_DeleteCommand);
    没有这一句,它是不起作用的.
      

  8.   

    晕, 删除还是不行. 第一个问题已经解决了,如各位所说,就是 ListItemType.Item , ListItemType.AlternatingItem 的问题 , 看来是对于 ListItemType.AlternatingItem 的理解有点问题.
    我一直以为, 如果我不启动隔行功能, 就不会需要去判断 ListItemType.AlternatingItem 删除事件委托 如下
    大家帮忙看一下
    private void InitializeComponent()
    {
    this.Load += new System.EventHandler(this.Page_Load);
    this.DataGrid_List.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid_List_ItemCommand);
    this.DataGrid_List.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid_List_DeleteCommand);
    this.DataGrid_List.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid_List_ItemDataBound);
    }
      

  9.   

    可是,没有看到你的程序里面有DataGrid_List_DeleteCommand这个事件的描述啊.你必须在这个事件里面删除记录
      

  10.   

    private void DataGrid_List_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    if(e.CommandName == "Delete")
    {
    lbPageShow.Text ="Delete OK"
    }

    }
      

  11.   


    重新生成一个ItemCommand事件试试  以前也碰到过这情况