1

PageLoad 中にプログラムで列が追加された RadGrid があります。私の Web ページでは、幅が空の列 (HeaderStyle.Width = Unit.Empty) が少なくとも 1 列あり、残りの列は特定のピクセル幅を使用しています。すべての列はサイズ変更可能です。(私のアプリでは、これらの幅を取得してデータベースに保存しています) グリッドはスクロール可能であるため、グリッドの制限を超えた場合、ユーザーはグリッド自体のサイズを変更せずにスクロールできます。

私が抱えている問題は、ユーザーがブラウザー ウィンドウのサイズを変更すると、特定の幅で空白の列が最終的に幅 0 に縮小されることです (「残りの」スペースを占有しているためです。そのアプローチはありますか?列が確実に表示されるように、この自動サイズ変更を 100px に制限できますか?

少なくとも 1 つの列が null またはパーセンテージ幅である必要があります。そうでない場合、RadGrid はデフォルトですべての列をパーセンテージ幅にするため、特定のピクセル幅の指定が無効になります。

私が試したアプローチは、残りのスペースを埋める空白の列を追加することです。幅が 0 であるかどうかは関係ありません。ただし、これにより、他の列のサイズを変更するときに問題が発生します。この場合、空白の列は、幅がゼロになるまで「消費」されてから、グリッド サイズの拡張を開始する必要があります (または、この場合はスクロール バーを追加します)。代わりに、横に押し出され、幅が維持されます。このアプローチが実現可能かどうかはわかりませんが、コードに残しておき、コメントを外して遊んでみました。

これが私のコードです:

ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AA_TEST.aspx.cs" Inherits="Records.AA_TEST" %>


<body id="body" runat="server">
    <form id="form1" runat="server">
        <telerik:RadScriptManager ID="RadScriptManager1" runat="server" />   
        <telerik:RadGrid ID="RecordGrid" runat="server" Width="99%" BorderWidth="1px" AutoGenerateColumns="false"
            AllowPaging="true" AllowCustomPaging="true" PageSize="20" AllowSorting="true" AllowFilteringByColumn="false"
            HeaderStyle-Wrap="true" HeaderStyle-HorizontalAlign="Left" HeaderStyle-VerticalAlign="Top"
            ItemStyle-HorizontalAlign="Left" AlternatingItemStyle-HorizontalAlign="Left"
            ItemStyle-VerticalAlign="Top" AlternatingItemStyle-VerticalAlign="Top"
            OnNeedDataSource="RecordGrid_NeedDataSource" OnItemDataBound="RecordGrid_ItemDataBound" >
            <PagerStyle Mode="NextPrevAndNumeric" AlwaysVisible="true" Position="Bottom" />
            <MasterTableView AutoGenerateColumns="false" CommandItemDisplay="None" TableLayout="Fixed"
                EnableHeaderContextMenu="false" AllowCustomSorting="true" AllowMultiColumnSorting="true"
                Width="100%">
            </MasterTableView>
            <ClientSettings AllowColumnsReorder="True" ColumnsReorderMethod="Reorder" ReorderColumnsOnClient="True" ClientMessages-DragToGroupOrReorder="">
                <ClientEvents OnColumnResized="columnResized" />
                <Resizing EnableRealTimeResize="true" AllowColumnResize="true" ClipCellContentOnResize="true" ResizeGridOnColumnResize="true"/>
                <Scrolling AllowScroll="true" SaveScrollPosition="true" UseStaticHeaders="true" />
            </ClientSettings>
            <SortingSettings SortToolTip="" SortedAscToolTip="" SortedDescToolTip="" />
            <GroupingSettings CaseSensitive="false" />
        </telerik:RadGrid>

        <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" />
        <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" >
            <AjaxSettings>
                <telerik:AjaxSetting AjaxControlID="RecordGrid">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="RecordGrid" LoadingPanelID="RadAjaxLoadingPanel1" UpdatePanelRenderMode="Inline" />
                    </UpdatedControls>
                </telerik:AjaxSetting>
            </AjaxSettings>
        </telerik:RadAjaxManager>

        <telerik:RadScriptBlock ID="RadScriptBlock1" runat="server">
        <script type="text/javascript">
            //<![CDATA[
            function columnResized(sender, eventArgs) {
                var masterTableView = sender.get_masterTableView();
                var uniqueName = eventArgs.get_gridColumn().get_uniqueName();
                if (!(uniqueName == "DeleteButton")) {
                    var deleteColumn = masterTableView.getColumnByUniqueName("DeleteButton");
                    if (deleteColumn != null) {
                        var deleteColumnIndex = deleteColumn.get_element().cellIndex;
                        deleteColumn.set_resizable(true);
                        masterTableView.resizeColumn(deleteColumnIndex, 30);
                        deleteColumn.set_resizable(false);
                    }
                }
            }
            //]]>
        </script>
        </telerik:RadScriptBlock>  
    </form>
</body>

ASPX.CS:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Telerik.Web.UI;

namespace Records
{
    public partial class AA_TEST : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            InitRecordGrid();
        }

        protected void InitRecordGrid()
        {
            if (!IsPostBack)
            {
                GridBoundColumn firstNameColumn = new GridBoundColumn();
                firstNameColumn.UniqueName = "FirstName";
                firstNameColumn.DataField = "FirstName";
                firstNameColumn.DataType = typeof(System.String);
                firstNameColumn.HeaderText = "First Name";
                firstNameColumn.Resizable = true;
                firstNameColumn.Reorderable = true;
                firstNameColumn.HeaderStyle.Width = Unit.Pixel(250);
                RecordGrid.Columns.Add(firstNameColumn);

                GridBoundColumn lastNameColumn = new GridBoundColumn();
                lastNameColumn.UniqueName = "LastName";
                lastNameColumn.DataField = "LastName";
                lastNameColumn.DataType = typeof(System.String);
                lastNameColumn.HeaderText = "Last Name";
                lastNameColumn.Resizable = true;
                lastNameColumn.Reorderable = true;
                lastNameColumn.HeaderStyle.Width = Unit.Empty;
                //lastNameColumn.HeaderStyle.Width = Unit.Pixel(250);
                RecordGrid.Columns.Add(lastNameColumn);

                /*
                GridButtonColumn blankColumn = new GridButtonColumn();
                blankColumn.UniqueName = "blank";
                blankColumn.Resizable = false;
                blankColumn.Reorderable = false;
                blankColumn.HeaderStyle.Width = Unit.Empty;
                RecordGrid.Columns.Add(blankColumn);
                */

                GridButtonColumn deleteColumn = new GridButtonColumn();
                deleteColumn.UniqueName = "DeleteButton";
                deleteColumn.HeaderStyle.Width = Unit.Pixel(30);
                deleteColumn.ButtonType = GridButtonColumnType.ImageButton;
                deleteColumn.ImageUrl = "/images/Delete.gif";
                deleteColumn.ItemStyle.CssClass = "delete";
                deleteColumn.CommandName = "Delete";
                deleteColumn.Resizable = false;
                deleteColumn.Reorderable = false;
                RecordGrid.Columns.Add(deleteColumn);
            }
        }

        protected void RecordGrid_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
        {
            List<NameRow> nameRows = new List<NameRow>();

            // Filler data
            nameRows.Add(new NameRow("Tyrion", "Lannister"));
            nameRows.Add(new NameRow("Jaime", "Lannister"));
            nameRows.Add(new NameRow("Daenerys", "Targeryen"));
            nameRows.Add(new NameRow("Jon", "Snow"));
            nameRows.Add(new NameRow("Robb", "Stark"));
            nameRows.Add(new NameRow("Benjamin", "Stark"));
            nameRows.Add(new NameRow("Khal", "Drogo"));

            RecordGrid.DataSource = nameRows;
        }

        protected void RecordGrid_ItemDataBound(object sender, GridItemEventArgs e)
        {
            if (e.Item is GridDataItem)
            {
                GridDataItem item = e.Item as GridDataItem;
                NameRow user = item.DataItem as NameRow;

                item["FirstName"].Text = user.FirstName;
                item["LastName"].Text = user.LastName;
            }
        }

        public class NameRow
        {
            public string FirstName = "";
            public string LastName = "";

            public NameRow(string first, string last)
            {
                FirstName = first;
                LastName = last;
            }
        }
    }
}
4

1 に答える 1

3
protected void RadGrid1_PreRender(object sender, EventArgs e)
{
  GridColumn gridCol = RadGrid1.MasterTableView.GetColumn("columnname");
  gridCol.HeaderStyle.Width = Unit.Pixel(100);   
}
于 2013-04-30T15:01:52.197 に答える