冷枫@CSDN

CSharp程序员大本营:积累平凡就是积累卓越!有了翅膀,你就有了天空!钝到极点的刀才最具杀伤力——因为它是锤子!

用户操作
[即时聊天] [发私信] [加为好友]
╄ 冷枫ID:JavaProgramers
483595次访问,排名98好友111人,关注者144
毕业于南阳理工学院计算机系软件工程专业,一直从事于软件开发工作,编程经验5年,一线程序员出身,开发实战经验丰富,精通Asp,Asp.NET, ERP(C#.NET),基于WEB(Asp.Net)的MIS等世道上的一般编程,精通SQL Server存储过程开发,曾为一家中型商务企业软件开发工程师,软件培训师。
JavaProgramers的文章
原创 287 篇
翻译 0 篇
转载 24 篇
评论 441 篇
╄ 冷枫的公告
╄ 冷枫 Asp.NET微软MVP
本Blog技术支持QQ群
[NET技术联盟]:1908832
[冷枫开发小组]:6307410
CSharp开放源码促进会
CSharp程序员大本营
最近评论
反对垄断:现在都在卖服务,软件都是白送的,微软降到100多就想笼络人心,做梦,微软迟早要完蛋
wyw_2002:“中国用户的计算机中60%都运行微软的操作系统“

请问这个60%是你统计的吗?
那40%是什么系统?

捡瓶子:废瓶子1角钱一个,一天捡100个,10元,跑去吃饭8元,买个XP,也要捡2年啊!
zenggang2008:反击盗版,在中国还有很长的路要走啊
大家都已经习惯"免费"了
路过:盗版不利于中国的软件业的发展,最终用户好像在盗版软件中得到了很多的好处,但是把中国的软件产业搞垮了。最终用户最后还是受害者。
文章分类
收藏
    相册
    IT英雄传奇
    大学留念集
    公司一角
    旅游系列二
    旅游系列三
    旅游系列一
    [╄ 冷枫]简介
    站长简介(RSS)
    经典网站收集
    .NET分页存储过程
    AJAX中国
    DOTNET控件网
    DotNet男孩社区
    Java共舞
    Tutorails[.NET]
    中国盟动力
    冷枫技术论坛
    开发者在线
    技术无极限(RSS)
    深圳赶集网
    源码网
    软件项目网
    网上邻居
    『 天道酬勤 』(RSS)
    『 孟子E章 』(RSS)
    『 孟子E章 』
    『 邹建专栏 』(RSS)
    『webdiyer 』
    微软官方
    ASP.NET 入门教程
    webcast视频教程
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 DataGrid使用心得收藏

    新一篇: 北京招聘ASP.Net程序员 | 旧一篇: asp.net 实现购物车详细代码

     DataGrid使用心得

      1. 为 DataGrid 控件设计样式
     
      在<asp:datagrid id="DataGrid1" runat="server">之后添加如下代码
     
      <FooterStyle ForeColor="Black" BackColor="#CCCCCC"></FooterStyle>
      <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#008A8C"></SelectedItemStyle>
      <AlternatingItemStyle BackColor="Gainsboro"></AlternatingItemStyle>
      <ItemStyle ForeColor="Black" BackColor="#EEEEEE"></ItemStyle>
      <HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#000084"></HeaderStyle>
     
      说明:
      (1) 在每个标签内主要是 ForeColor   BackColor Font-Bold 这几个属性值
     
      2. 为 DataGrid 控件添加绑定列
     
      <asp:BoundColumn DataField="" ReadOnly="True" HeaderText=""></asp:BoundColumn>
      说明:
      (1) 在标签内的基本属性是 DataField / HeaderText
      (2) DataFormatString 用于 获取或设置指定列中各项的显示格式的字符串。
      形式为 { A: Bxx }。例如,格式化字符串 {0:F2} 将显示带两位小数的定点数。
      其中A值只能设置为 0,因为每个单元格中只有一个值。
      冒号后的字符(常规示例中为 B)指定值的显示格式
      C 以货币格式显示数值。
        D 以十进制格式显示数值。
        E 以科学记数法(指数)格式显示数值。
        F 以固定格式显示数值。
        G 以常规格式显示数值。
        N 以数字格式显示数值。
        X 以十六进制格式显示数值。
      (3) Visible 获取或设置一个值,该值指示此列在 DataGrid 控件中是否可见。
      (4) ReadOnly 设置些列是否只读,若是只读的话,则不能修改.
      (5) SortExpression 获取或设置选择进行排序的列时传递到 OnSortCommand 方法的字段或表达式的名称。
     

    3. 为 DataGrid 控件添加模板列
      <asp:TemplateColumn HeaderText="类别">
      <ItemTemplate>
        <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "actorclassname") %>' runat="server" ID="Label1"/>
      </ItemTemplate>
      <EditItemTemplate>
        <select name="sltclassname">
        <% = ActorClass.GetParentClass(0) %>
        </select>
      </EditItemTemplate>
      </asp:TemplateColumn>
      说明:
      (1) 基本框架是
        <asp:TemplateColumn HeaderText="类别">
      <ItemTemplate></ItemTemplate>
      </asp:TemplateColumn>
      (2) 全面的模板列
      <asp:TemplateColumn>

              <HeaderTemplate>
                <b> Tax </b>
              </HeaderTemplate>

              <ItemTemplate>
                <asp:Label
                  Text='<%# DataBinder.Eval(Container.DataItem, "Tax") %>'
                  runat="server"/>
              </ItemTemplate>

              <EditItemTemplate>

                <asp:CheckBox
                  Text="Taxable"
                  runat="server"/>

              </EditItemTemplate>

              <FooterTemplate>
                <asp:HyperLink id="HyperLink1"
                  Text="Microsoft"
                  NavigateUrl="
    http://www.microsoft.com"
                  runat="server"/>
              </FooterTemplate>

            </asp:TemplateColumn>
    (3) 为布尔型列应用模板列
    <asp:TemplateColumn>
          <ItemTemplate>
            <asp:Label
                Text='<%# DataBinder.Eval(Container.DataItem, "Tax") %>'
                  runat="server"/>
            </ItemTemplate>
            <EditItemTemplate>
            <asp:CheckBox
                Text="Taxable"
                  runat="server"/>

            </EditItemTemplate>
        </asp:TemplateColumn>
        在正常状态,用 Label控件显示
        在编辑状态,用 CheckBox控件显示
     
    (4) 为枚举类型列应用模板列,如业务地区(全网/广东/云南等等)
    <asp:TemplateColumn HeaderText="处理方式">
      <ItemTemplate>
      <asp:Label ID="lbStatus">
      <%# DataBinder.Eval(Container, "DataItem.DealWith") %>
      </asp:Label>
      </ItemTemplate>
      <EditItemTemplate>
      <asp:DropDownList id="dpStatus2" runat="server" DataTextField="status">
      <asp:ListItem Value="Log">Log(日志)</asp:ListItem>
      <asp:ListItem Value="SendSms">SendSms(短信)</asp:ListItem>
      </asp:DropDownList>
      </EditItemTemplate>
    </asp:TemplateColumn>
    在正常状态,用 Label控件显示
    在编辑状态,用 DropDownList控件显示

    (5) 为长字符串应用模板列,如一篇文章的内容
    还未做过

    4. 为 DataGrid 控件添加按钮列

    <asp:ButtonColumn
        HeaderText="Remove from cart"
        ButtonType="PushButton"
        Text="Remove"
        CommandName="RemoveFromCart" />
      (1) 要使用按钮列,必须在 DataGrid 控件中添加 OnItemCommand 属性,并为该事件添加处理方法.
      (2) 模板列可以实现按钮列能实现的任何功能.
     
      5. 为 DataGrid 控件添加编辑列
      <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" HeaderText="编辑" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
      (1) ButtonType 有两个值: LinkButton 超级链接样式按钮的列 | PushButton 普通按钮的列。

    6. 为 DataGrid 控件添加超链接列
    <asp:HyperLinkColumn Text="添加子类" DataNavigateUrlField="ActorclassID" DataNavigateUrlFormatString="addActorClass.aspx?classID={0}"></asp:HyperLinkColumn>
    (1) 为每一行设置相同的文字及跳转的URL地址
    设置 Text 和 NavigateUrl 属性,则列中的所有超级链接将共享同一标题和 URL
    (2) 为每一行设置不同的文字及不同跳转的URL地址
    A. 用 DataTextField 设置数据源字段,若还想在原数据的基础上加工一下(如字段值为300,想显示为300元)
      则再设置 DataTextFormatString 字段
    B. 用DataNavigateUrlField 及 DataNavigateUrlFormatString 来设置URL地址
      用DataTextField = "money" DataTextFormatString = "{0}元"
    C. 举例
      DataNavigateUrlField="ActorclassID" DataNavigateUrlFormatString="addActorClass.aspx?classID={0}"
     
    7. 为 DataGrid 控件添加"编辑"代码
    在 DataGrid 标签中加入
    OnUpdateCommand="DataGrid1_Update" OnCancelCommand="DataGrid1_Cancel" OnEditCommand="DataGrid1_Edit"代码
    在codeBehind页面加入如下代码
    ///响应编辑按钮
    public void DataGrid1_Edit(Object sender, DataGridCommandEventArgs e)
    {
      DataGrid1.EditItemIndex = e.Item.ItemIndex;
      if (Request.QueryString.Get("classID") != null)
      Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
      else
      Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));
    }
     
    ///响应取消按钮
    public void DataGrid1_Cancel(Object sender, DataGridCommandEventArgs e)
    {
      DataGrid1.EditItemIndex = -1;
      if (Request.QueryString.Get("classID") != null)
      Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
      else
      Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));

    }

    ///响应更新按钮  
    public void DataGrid1_Update(Object sender, DataGridCommandEventArgs e)
    {
      TextBox ClassNameText = (TextBox)e.Item.Cells[1].Controls[0];
      string className = ClassNameText.Text;
      int classID = Int32.Parse((e.Item.Cells[0].Text).ToString());
      TextBox orderID2 = (TextBox)e.Item.Cells[5].Controls[0];
      int orderID = Int32.Parse(orderID2.Text);
      ActorClass.ModifyActorClass(className,classID,orderID);

      DataGrid1.EditItemIndex = -1;
      if (Request.QueryString.Get("classID") != null)
      Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
      else
      Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));
    }
    说明
    (1) DataGrid 事件处理程序的格式
      MethodName(Object sender, DataGridCommandEventArgs e)
    (2) 更新按钮的说明
      A. 获取编辑状态中的文本框
      TextBox ClassNameText = (TextBox)e.Item.Cells[1].Controls[0];
      string className = ClassNameText.Text;
      B. 获取编辑状态中的下拉列表框
      方法一
      int classID;
      classID = Int32.Parse(Request.Form.Get("sltclassname"));
      方法二
      DropDownList bbb = (DropDownList)e.Item.Cells[10].FindControl("dpStatus2");
      string ddpValue = bbb.SelectedValue
      C. 获取编辑状态中的复选框
      bool boolEnabled = ((CheckBox)e.Item.FindControl("chk_enabled")).Checked;
      String str2;
      if (boolEnabled)
      {
      str2="1";
      }
      else
      {
      str2="0";
      }
      赋值给 str2 ,原因是插入到数据库的布尔型值只能是 1 或者 0
      D. 获取编辑状态中的文本值,即该列是只读的.
      string storyID = (e.Item.Cells[0].Text).ToString();

    8. 为 DataGrid 控件添加分页事件
    在 DataGrid 控件标签中加入如下代码
    OnPageIndexChanged="DataGrid1_PageIndexChanged"
    在后台中加入如下代码
    /// <summary>
    /// 响应分页事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public void DataGrid1_Page(Object sender, DataGridPageChangedEventArgs e)
    {
      DataGrid1.CurrentPageIndex = e.NewPageIndex;
      DataBind();
    }

    9. 为 DataGrid 控件添加绑定事件,即在 DataGrid绑定时发生的事件处理
    一般用些事件来,做一些页面上的效果.如更改背景色,文本框大小等.
    OnItemDataBound="DataGrid1_ItemDataBound"
    /// <summary>
    /// 响应DataGrid绑定事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
      if (e.Item.ItemType == ListItemType.Item)
      {
      e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#c8dafa'");
      e.Item.Attributes.Add("onmouseout","this.style.backgroundColor='white'");

      }
      else if (e.Item.ItemType == ListItemType.AlternatingItem)
      {
      e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#c8dafa'");
      e.Item.Attributes.Add("onmouseout","this.style.backgroundColor='#f6f6f6'");
      }
    }

    10. 为 DataGrid 控件添加接钮处理事件程序
    在 DataGrid 控件标签中加入如下代码
    OnItemCommand="ItemsGrid_Command"
    在后台中加入如下代码
    public void ItemsGrid_Command(Object sender, DataGridCommandEventArgs e)
    {
      switch(((LinkButton)e.CommandSource).CommandName)
      {

      case "Delete":
      int classID = Int32.Parse((e.Item.Cells[0].Text).ToString());
      ActorClass.DeleteActorClass(classID);
      if (Request.QueryString.Get("classID") != null)
        Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
      else
        Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));
      break;

      // Add other cases here, if there are multiple ButtonColumns in
      // the DataGrid control.
      case "hidden":
      int actorID = Int32.Parse((e.Item.Cells[0].Text).ToString());
      ActorClass.HiddenActorClass(actorID);
      if (Request.QueryString.Get("classID") != null)
        Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
      else
        Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));
      break;
      case "MoveUp":
      int actorclassID = Int32.Parse((e.Item.Cells[0].Text).ToString());
      string orderID = (e.Item.Cells[5].Text).ToString();
      ActorClass.MoveUp(orderID,actorclassID);
      if (Request.QueryString.Get("classID") != null)
        Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
      else
        Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));
      break;
      case "MoveDown":
      actorclassID = Int32.Parse((e.Item.Cells[0].Text).ToString());
      orderID = (e.Item.Cells[5].Text).ToString();
      ActorClass.MoveDown(orderID,actorclassID);
      if (Request.QueryString.Get("classID") != null)
        Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
      else
        Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by orderID"));
      break;
     

      default:
      // Do nothing.
      break;

      }
    }

    11. 为 DataGrid添加模板列,但是内容根据字段值来显示"链接",还是文本
    以下三个都是,根据字段列不同,而显示内容及显示控件不同的处理代码.
    <asp:TemplateColumn HeaderText="子菜单">
      <ItemTemplate>
      <%# ActorClassManage.hasLeaf(DataBinder.Eval(Container.DataItem,"ActorClassID").ToString(),DataBinder.Eval(Container.DataItem,"child").ToString())%>
      </ItemTemplate>
    </asp:TemplateColumn>
    public static string hasLeaf(string id,string child)
    {
      string lRtn = "";
      if (Int32.Parse(child) > 0)
      lRtn="<a href='Actorclassmanage.aspx?classID="+id+"'><font color=blue>子菜单(" + child + ")</font></a>";
      else
      lRtn = "无子菜单";

      return lRtn;
    }
    <asp:TemplateColumn HeaderText="属性">
      <ItemTemplate>
      <asp:LinkButton Text='<%# IsHidden(DataBinder.Eval(Container.DataItem,"ActorClassID").ToString(),(bool)DataBinder.Eval(Container.DataItem,"Enabled")) %>' runat="server" CommandName="hidden" ID="Linkbutton1"></asp:LinkButton>
      </ItemTemplate>
    </asp:TemplateColumn>
    public static string IsHidden(string id,bool enabled)
    {
      string lRtn = "";
      if (enabled == true)
      {
      lRtn = "[显示]";
      }
      else
      {
      lRtn = "隐藏";
      }
      return lRtn;
    }
    public static void Sort(string actorclassID, string orderID)
    {
      string temp = "";
      if (Int32.Parse(BgPicManage.GetMaxCode("actorclass","orderID")) == Int32.Parse(orderID))
      {
      temp += "<ipnut type='submit' value='向下移'>";
      }
      if (Int32.Parse(orderID) == 0)
      {
      temp += "<ipnut type='submit' value='向上移'>";
      }
    }

    12. DataGrid 控件自定义分页代码

    将下列代码放于包含<DataGrid>的form中去,
    <p style="FONT-SIZE:9pt" align="center">
          <asp:label id="lblPageCount" runat="server"></asp:label>
          <asp:label id="lblCurrentIndex" runat="server"></asp:label>
          <asp:linkbutton id="btnFirst" onclick="PagerButtonClick" runat="server" Font-Name="verdana"
          Font-size="8pt" ForeColor="navy" CommandArgument="0"></asp:linkbutton>
          <asp:linkbutton id="btnPrev" onclick="PagerButtonClick" runat="server" Font-Name="verdana"
          Font-size="8pt" ForeColor="navy" CommandArgument="prev"></asp:linkbutton>
          <asp:linkbutton id="btnNext" onclick="PagerButtonClick" runat="server" Font-Name="verdana"
          Font-size="8pt" ForeColor="navy" CommandArgument="next"></asp:linkbutton>
          <asp:linkbutton id="btnLast" onclick="PagerButtonClick" runat="server" Font-Name="verdana"
          Font-size="8pt" ForeColor="navy" CommandArgument="last"></asp:linkbutton>
        </p>
       
        后台代码
       
        private void Page_Load(object sender, System.EventArgs e)
        {
          // 在此处放置用户代码以初始化页面
          btnFirst.Text = "最首页";
          btnPrev.Text = "前一页";
          btnNext.Text = "下一页";
          btnLast.Text = "最后页";
          //绑定数据源
          if (!Page.IsPostBack)
          {
          OpenDatabase();
          BindGrid();
          }
        }
       
        //用于显示"第几页,总*页"
        private void ShowStats()
    {
      lblCurrentIndex.Text = "第 " + (MyDataGrid.CurrentPageIndex + 1).ToString() + " 页";
      lblPageCount.Text = "总共 " + MyDataGrid.PageCount.ToString() + " 页";
    }

    //响应分页按钮
    public void PagerButtonClick(object sender, EventArgs e)
        {
          string arg = ((LinkButton)sender).CommandArgument.ToString();
          switch(arg)
          {
            case "next":
            if (MyDataGrid.CurrentPageIndex < (MyDataGrid.PageCount - 1))
            {
              MyDataGrid.CurrentPageIndex += 1;
            }
            break;
            case "prev":
            if (MyDataGrid.CurrentPageIndex > 0)
            {
              MyDataGrid.CurrentPageIndex -= 1;
            }
            break;
            case "last":
            MyDataGrid.CurrentPageIndex = (MyDataGrid.PageCount - 1);
            break;
            default:
            MyDataGrid.CurrentPageIndex = System.Convert.ToInt32(arg);
            break;
          }
          BindGrid();
          ShowStats();
        }

    发表于 @ 2006年12月28日 22:07:00|评论(loading...)|编辑

    新一篇: 北京招聘ASP.Net程序员 | 旧一篇: asp.net 实现购物车详细代码

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © ╄ 冷枫