• ASPxTreeList及ASPxGridView使用



    ASPxTreeList及ASPxGridView使用

    时间:2012-05-30 10:00来源:未知 作者:admin 点击: 1542次我要投稿  高质量的ASP.NET空间,完美支持1.0/2.0/3.5/4.0/MVC等

    一.    数据绑定

     ASPxTreeList和他数据绑定一样,可用各种类型的数据源。但因为要显示树形结构,

    所以除了DataSourceID必须进行设置以外,还得必须设置KeyFieldName与ParentFieldName(ASPxGridView只需指定KeyFieldName),KeyFieldName与ParentFieldName就是主、子的关系,用于创建树形结构。

     

    例如:

    AspxTreeList配置:

    <dx:ASPxTreeListID="treeList"DataSourceID="objectDataSource" runat="server" KeyFieldName="Id"ParentFieldName="ParentId" >

    </dx:ASPxTreeList>

    DataSource配置:

    <asp:ObjectDataSourceID="objectDataSource"runat="server"DataObjectTypeName="Entity"

    TypeName="Provider"InsertMethod="Insert"DeleteMethod="Delete"

    UpdateMethod="Update"SelectMethod="Select">

    <UpdateParameters>

         <asp:ParameterName="Id"/>

         <asp:ParameterName=" ParentId"/>

         <asp:ParameterName="Field1"/>

             <asp:ParameterName="Field2"/>

    </UpdateParameters>

    </asp:ObjectDataSource>

    后台代码:

        publicstaticclassProvider

        {

            privateconststring key = "EntitiesProvider";

            privatestaticHttpSessionState session = HttpContext.Current.Session;

            #region private methods

            privatestaticList<Entity> Data

            {

                get

                {

                    if (null == session[key])

                        Restore();

     

                    return session[key] asList<Entity>;

                }

            } 

            privatestaticList<Entity> CreateData()

            {           

            } 

            privatestaticEntity FindItem(Guid id)

            {

                return Data.Find(Item => Item.Id.ToString().Equals(id.ToString()));

            }

            #endregion 

            #region public methods

            publicstaticvoid Restore()

            {

                session[key] = CreateData();

            }

            publicstaticIEnumerable Select()

            {

                return Data;

            }

            publicstaticvoid Insert(Entity item)

            {

                item.Id = Guid.NewGuid();

                Data.Add(item);

            }

          publicstaticvoid Update(Entity item)

            {

                Entity storedItem = FindItem(item.Id);

                Data.Remove(storedItem);

                Data.Add(item);

            }

            publicstaticvoid Delete(Entity item)

            {

                Entity storedItem = FindItem(item.Id);

                Data.Remove(storedItem);

            }

            #endregion

        }

        [Serializable]

        publicclassEntity

        {

            ///<summary>

            /// ID

            ///</summary>

            publicGuid Id { get; set; }

     

            ///<summary>

            ///父节点ID

            ///</summary>

            publicGuid ParentId { get; set; }

     

            ///<summary>

            /// Field1

            ///</summary>

            publicstring Field1 { get; set; }

     

            ///<summary>

            /// Field2

            ///</summary>

            publicstring Field2 { get; set; }

        }

     

    同时可以指定在ASPxTreeList默认展开的级数,代码如下:        
            this.ASPxTreeList1.ExpandToLevel(2);   //展开2级

    二.    数据导出

    关于ASPxTreeList数据导出,DevExpress同样为我们提供了解决方案,即ASPxTreeListExporter数据导出组件。

    ASPxTreeListExproter的用法非常简单,同时提供了多种文件格式的导出方案,xls| xlsx|pdf|rft

    ASPxGridViewExporter还支持Csv格式导出方案.

    使用方法:
    1 .向有ASPxTreeList数据的面页添加ASPxTreeListExporter,并设置Exporter的TreeListID属性,即导出哪一个ASPxTreeList.默认不指定的情况下会导出页面中第一个ASPxTreeList,但当有多个时并希望导出指定ASPxTreeList时,则必须指定。

    ASPxTreeListExporter

    <dx:ASPxTreeListExporter ID="treeListExporter" runat="server" TreeListID="treeList" />

    ASPxGridViewExporter

    <dx:ASPxGridViewExporter ID="gridViewExporter" runat="server" GridViewID="gridView"/>


     2.指定ASPxTreeListExporter的导出方法,格式文件格式和导出策略不同,ASPxTreeListExporter提供了以下方法:  
                    void WritePdf(Stream stream);  
                    void WritePdfToResponse();

                    void WriteRtf(Stream stream);
                    void WriteRtfToResponse();    
                    void WriteXls(Stream stream);
                    void WriteXlsToResponse();

                    void WriteXlsx(Stream stream);
                    void WriteXlsxToResponse();

    每个方法都有多个重载,可权限需要进行调用。另外需要说明的是,如果ASPxTreeList设置的分页功能,调用以下方法时可能出现只导出当前面的现象,所以调用以上方法进,可以设置导出的详细设置,如下:
                     ASPxTreeListExporter.Settings.ExpandAllNodes = true;
                     ASPxTreeListExporter.Settings.ExportAllPages = true;
                     ASPxTreeListExporter.Settings.ShowTreeButtons = true;

    三.    分页设置

    默认情况下,ASPxTreeList不进行分页处理,如果需要分面功能,可以设置其属性SettingsPager

    如下代码:
                    <SettingsPager AlwaysShowPager="True" Mode="ShowPager">
                    </SettingsPager>

    默认页大小为10,可以通过SettingPager的 PageSize属性设置,PageSize="20"

    四.    用户弹出面板设置

    即让用户自定义ASPxTreeList显示的字段名称,如下设置
                <SettingsCustomizationWindow Enabled="True" />

    如果当某一字段在初始时设置Visible=false,那么此字段将会放在CustomizationWindow中,当然,用户也可以把它拖放出来,也可以拖放进去。以下代码就是控制如果显示与隐藏CustomizationWindow.    
               treeList.ShowCustomizationWindow();    //ClientInstanceName="treeList"
               treeList.HideCustomizationWindow();

    例如:

    <script type="text/javascript">

            function CwShow() {

                treeList.ShowCustomizationWindow();

                btnCustWin.SetText("Hide Customization Window");

            }

     

            function CwHide() {

                treeList.HideCustomizationWindow();

                btnCustWin.SetText("Show Customization Window");

            }

     

            function CwToggle() {

                if (treeList.IsCustomizationWindowVisible())

                    CwHide();

                else

                    CwShow();

            }

    </script>

     

    <dx:ASPxButton ID="ASPxButton1" runat="server"

    Text="Show Customization Window"

            AutoPostBack="False" ClientInstanceName="btnCustWin"

            EnableClientSideAPI="True" UseSubmitBehavior="False">

            <ClientSideEvents Click="function(s, e) { CwToggle(); }" />

    </dx:ASPxButton>

     

    <dx:ASPxTreeList ID="treeList" runat="server"

    AutoGenerateColumns="False"

    DataSourceID="AccessDataSource1" Width="100%"

            KeyFieldName="ID" ParentFieldName="ParentID" 

            ClientInstanceName="treeList">

            <Columns>       

                <dx:TreeListDataColumn FieldName="Text" Visible="False" />

            </Columns>      

            <SettingsCustomizationWindow Enabled="True"

    PopupHorizontalOffset="2" />

            <ClientSideEvents

                     Init="function() { CwShow(); }"

                     CustomizationWindowCloseUp="function() { CwHide(); }" />

        </dx:ASPxTreeList>

    五.    样式设置

    常用设置如下:

              <Styles AlternatingNode-Enabled="True"></Styles>


               <Settings GridLines="Both"
                 ShowFooter="True"
                 ShowGroupFooter="True"
                 ShowPreview="True" />

     

    <SettingsBehavior ExpandCollapseAction="NodeDblClick"

    AllowFocusedNode="true" />

       

    <SettingsEditing Mode="EditFormAndDisplayNode"

    AllowNodeDragDrop="true" AllowRecursiveDelete="true" />

                 

    ShowPreview可显示数据内容较多的View,不影响TreeList的展示。
                 1.设置ASPxTreeList的PreviewFieldName="Location"

    或者<Templates><PreviewRow></PreviewRow></Templates>
    2.<Settings ShowPreview="True" />

     

    ASPxGridView还可以设置

    <SettingsDetail ShowDetailRow="true"/>     

            <Templates><DetailRow></DetailRow></Templates>

     

    六.    多表头设置

    辅助类:

    //***********************************************************************

    //  File: DynamicHeaderHepler.cs

    //  Description: 动态生成多表头帮助类

    //***********************************************************************

    public class DynamicHeaderHepler

    {

        public static void SetAspxGridViewBand(ASPxGridView gridView)

        {

            gridView.HtmlRowCreated +=

    new ASPxGridViewTableRowEventHandler(GridView_HtmlRowCreated);

        }

           

    static void GridView_HtmlRowCreated(object sender, ASPxGridViewTableRowEventArgs e)

         {

            ASPxGridView gridView = sender as ASPxGridView;

            if (e.RowType == GridViewRowType.Data &&

    e.VisibleIndex == gridView.PageIndex * gridView.SettingsPager.PageSize)

            {

                Table table = e.Row.Parent as Table;

                if (table != null)

                {

                    TableRow row = new TableRow();

                    TableCell firstBand = GetNewTableCell(row, string.Empty);

                    foreach (GridViewDataColumn col in gridView.Columns)

                    {

                        if (col.Name.IndexOf("|") > 0)

                        {

                             string bandname = col.Name.Substring(0, col.Name.IndexOf("|"));

                             TableCell band = null;

                             foreach (TableCell t in row.Cells)

                             {

                                if (t.Text == bandname)

                                {

                                    band = t;

                                    break;

                                }

                            }

     

                            if (band == null)

                                band = GetNewTableCell(row, bandname);

     

                            col.Caption = col.Name.Substring(col.Name.IndexOf("|") + 1);

                            band.ColumnSpan++;

                        }

                        else

                            firstBand.ColumnSpan++;

                    }

     

                    table.Rows.AddAt(0, row);

                }

            }

        }

       

    //可以在此修改单元格样式

        private static TableCell GetNewTableCell(TableRow row, string bandname)

        {

            TableCell band = new TableCell();

            band.Text = bandname;

            row.Cells.Add(band);

            band.CssClass = "dxgvHeader_Aqua";

            band.HorizontalAlign = HorizontalAlign.Center;

            band.BorderStyle = BorderStyle.NotSet;

            band.BorderColor = row.BorderColor;           

     

            return band;

         }

    }

     

    服务端:

    DynamicHeaderHepler.SetAspxGridViewBand(gridView);

    gridView.DataBind();

     

    客户端:

    <Columns>                                          

       <dx:GridViewDataHyperLinkColumn FieldName="Field10" Caption="列1|列11"

    Name="列1|列11"></dx:GridViewDataHyperLinkColumn>                                         

    <dx:GridViewDataHyperLinkColumn FieldName="Field10" Caption="列1|列12"

    Name="列1|列12"> </dx:GridViewDataHyperLinkColumn>

    <dx:GridViewDataHyperLinkColumn FieldName="Field10" Caption="列2|列21"

    Name="列2|列21"> </dx:GridViewDataHyperLinkColumn>

    <dx:GridViewDataHyperLinkColumn FieldName="Field10" Caption="列2|列22"

    Name="列2|列22"> </dx:GridViewDataHyperLinkColumn>

    </Columns>

    七.    其它设置

    每行增加增删改按钮:

    <dx:TreeListCommandColumn UpdateButton-Text="提交" CancelButton-Text="取消">

    <NewButton Text="新增" Visible="true"></NewButton>

    <EditButton Text="修改" Visible="true"></EditButton>

    <DeleteButton Text="删除" Visible="true"></DeleteButton>

    </dx:TreeListCommandColumn>

     

    自定义EditForm:

    在配置Columns时通过EditFormSettings设置当前列在EditForm中的显示样式,如下

    <dx:TreeListMemoColumn FieldName="Text" Visible="False">

             <EditFormSettings VisibleIndex="3" ColumnSpan="2" Visible="true" />

             <PropertiesMemo Rows="6" />

             <EditFormCaptionStyle VerticalAlign="top" />

    </dx:TreeListMemoColumn>

    或者通过模板设置,如下

    <Templates>

             <EditForm>

                       <dx:ASPxPageControl ID="tabs" runat="server" ActiveTabIndex="0" Width="100%">

                                <TabPages>

                                         <dx:TabPage Text="Headers">

                                                   <ContentCollection>

                                                            <dxw:ContentControl runat="server">                    

                                                                     <dx:ASPxTreeListTemplateReplacement runat="server" ReplacementType="Editors" />

                                                            </dxw:ContentControl>

                                                   </ContentCollection>

                                         </dx:TabPage>

                                         <dx:TabPage Text="Message">

                                                  <ContentCollection>

                                                            <dxw:ContentControl runat="server">

                                                                     <dxe:ASPxMemo ID="message" runat="server" AutoResizeWithContainer="True"

                                                                               Height="200px" Width="100%"

                                                                               Text='<%# Eval("Field2") %>' />

                                                            </dxw:ContentControl>

                                                   </ContentCollection>

                                         </dx:TabPage>

                                </TabPages>

                       </dx:ASPxPageControl>

                       <div >

                                <dx:ASPxTreeListTemplateReplacement runat="server" ReplacementType="UpdateButton" />

                                <dx:ASPxTreeListTemplateReplacement runat="server" ReplacementType="CancelButton" />                                      

                       </div>

             </EditForm>

    </Templates>

    八.    选择事件

    可添加ASPxTreeList的FocuseNodeChnaged事件来处理选择Node时的逻辑,但ASPxTreeList必须设置AllowFocusedNode=true,如下:
             <SettingsBehavior AllowFocusedNode="True" />

    通过FocuseNodeChnaged事件来回调ASPxTreeList的服务端事件来完成通信,如下:

    客户端:
            <ClientSideEvents CustomDataCallback="function(s, e) {

             alert(e.result);
            }"

    FocusedNodeChanged="function(s, e) {
             var key = treeList.GetFocusedNodeKey();
           treeList.PerformCustomDataCallback(key); 
      }" />

     

    服务端:

       protected void treeList_CustomDataCallback(object sender, TreeListCustomDataCallbackEventArgs e)

        {

            string key = e.Argument.ToString();

            TreeListNode node = (sender as ASPxTreeList).FindNodeByKeyValue(key);

            e.Result = node.GetValue("Field1");

    }

     

    ASPxGridView这些工作都可以在客户端完成

    如下:

    <script language="javascript" type="text/javascript">   

            function RowClickHandler() {

               gridView.GetRowValues(gridView.GetFocusedRowIndex(), 'Field1; Field2', OnGetRowValues);

            }

     

            function OnGetRowValues(values) {

                alert(values[0]);

                alert(values[1]);

            }

        </script>

     

    <dx:ASPxGridView ID="gridView" runat="server" AutoGenerateColumns="False" ClientInstanceName=" gridView "                                                DataSourceID="supplyBusinessScopeDataSource" KeyFieldName="Id">

         <SettingsBehavior EnableRowHotTrack="True" AllowFocusedRow="True" />

         <Columns>                                        <dx:GridViewDataTextColumn FieldName="Field1" Visible="True" </dx:GridViewDataTextColumn>

    <dx:GridViewDataTextColumn FieldName="Field2" Visible="True">                                                     </dx:GridViewDataTextColumn>

        </Columns>

        <ClientSideEvents RowClick="RowClickHandler" />

    </dx:ASPxGridView>

     

    以下代码设置为可多选,并且可以递归选择。
            <SettingsSelection Enabled="True" Recursive="True" />

     

    九.    客户端方法总结

    ASPxTreeList:

    var key = treeList.GetFocusedNodeKey();         //获取选中行的键值
    treeList.PerformCustomDataCallback(key);        //回调服务端方法

    ASPxGridView:

    gridView.PerformCallback ();    //Callback

    gridView.SelectRows();      //选择全部行

    gridView.UnselectRows();   //取消全部行选中状态

    gridView.SelectAllRowsOnPage();    //选择当前页全部行

    gridView.UnselectAllRowsOnPage(); //取消当前页全部行选中状态

     

    十.    服务端方法总结

    ASPxTreeList:
    TreeListNode node = treeList.FindNodeByKeyValue(key);     //根据键值获取结点

      string value = node.GetValue("Field1"); //根据字段名获取数据

     

    ASPxGridView:

    gridView.GetMasterRowKeyValue(); //获取Master行键值

  • 相关阅读:
    ll command not found 当ll无法识别的解决办法
    idea控制台全屏
    查看centos版本号
    java Error: 无法访问org.apache.http.annotation.ThreadSafe 找不到org.apache.http.annotation.ThreadSafe的类文件
    DigestUtils.md5Hex()加密
    JAVA 8 '::' 关键字
    CVE-2020-1472 NetLogon特权提升漏洞
    OpenSSH的scp命令注入漏洞(CVE-2020-15778)
    redis未授权访问漏洞&简单利用&总结
    常见web信息泄露
  • 原文地址:https://www.cnblogs.com/ydfq-home/p/5017451.html
Copyright © 2020-2023  润新知