DataGrid使用心得(附大量代码)

翻译|其它|编辑:郝浩|2007-08-22 15:26:46.000|阅读 1724 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

        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>
                 Text='<%# DataBinder.Eval(Container.DataItem, "Tax") %>'
        runat="server"/>
        </ItemTemplate>
        <EditItemTemplate>
                 Text="Taxable"
        runat="server"/>
        </EditItemTemplate>
        <FooterTemplate>
                 Text="Microsoft"
        NavigateUrl="http://www.microsoft.com"
        runat="server"/>
        </FooterTemplate>
        </asp:TemplateColumn>
        (3)
为布尔型列应用模板列
        <asp:TemplateColumn>
        <ItemTemplate>
                 Text='<%# DataBinder.Eval(Container.DataItem, "Tax") %>'
        runat="server"/>
        </ItemTemplate>
        <EditItemTemplate>
                 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 控件添加按钮列
                 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>
                 Font-size="8pt" ForeColor="navy" CommandArgument="0"></asp:linkbutton>
                 Font-size="8pt" ForeColor="navy" CommandArgument="prev"></asp:linkbutton>
                 Font-size="8pt" ForeColor="navy" CommandArgument="next"></asp:linkbutton>
                 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)) <br >         {
        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();
        } 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:csdn

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP