【问题标题】:Using jQuery to resize all editable fields in grid使用 jQuery 调整网格中所有可编辑字段的大小
【发布时间】:2011-11-18 22:37:18
【问题描述】:

我的一个网络表单上有一个 RadGrid,我正在使用 InPlace(内联)编辑,底部有一个空行用于插入。

当网格加载时,使用 JavaScript(我假设)在渲染后自动调整列的大小(您实际上可以看到在页面加载时调整的列),但列中的输入没有调整大小以适应调整后的列宽,这会留下很多空白。我试图挂钩自动调整列大小的 JavaScript 方法,但它似乎不可能。

我想使用 jQuery 来查找所有输入之后列已调整大小,并调整它们的大小以适应列的宽度。 只有需要调整大小的输入是TextBoxesDropDowns,我不需要计算宽度 - 只需将控件的宽度设置为 100%,这样它们就可以填充列中的可用空间。

编辑

我还应该注意,输入在标记中设置为 100% 宽度,但在调整列大小时它们不会缩放。这种行为似乎不正确。

RadGrid 确实有一个ClientSettings 部分,您可以在其中订阅许多客户端事件,但是当网格自动调整大小时,调整大小事件不会触发;仅当用户手动调整列大小时。

能否请一些精通 jQuery 的人就我如何做到这一点提出一些想法?

这是 RadGrid 的一些示例标记:

<telerik:RadGrid ID="grdVendorAddresses" runat="server">                                
    <MasterTableView AutoGenerateColumns="false" InsertItemDisplay="Bottom" EditMode="InPlace" DataKeyNames="AddressID, AddressTypeID, IsActive">      
        <ItemStyle Font-Size="12px" Font-Names="Verdana" Wrap="false" />
        <HeaderStyle Font-Size="12px" Font-Names="Verdana" Wrap="false" />
        <AlternatingItemStyle Font-Size="12px" Font-Names="Verdana" Wrap="false" />         
        <Columns>
            <telerik:GridEditCommandColumn UniqueName="EditButton" ButtonType="ImageButton" EditImageUrl="/images/edit_icon_pencil.png" InsertImageUrl="/images/save_icon_small.png" UpdateImageUrl="/images/save_icon_small.png" CancelImageUrl="/images/cancel_icon.png">
                <ItemStyle HorizontalAlign="Center" Width="60" />
            </telerik:GridEditCommandColumn>              
            <telerik:GridTemplateColumn HeaderText="Address" DataField="StreetAddress" Resizable="false">                        
                <ItemStyle HorizontalAlign="Left" />        
                <HeaderStyle HorizontalAlign="Left" />                
                <ItemTemplate>                       
                    <%#Eval("StreetAddress")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <div style="padding:5px 0px 5px 0px;">
                        <telerik:RadTextBox ID="txtStreetAddress" runat="server" Skin="Sunset" Text='<%#Bind("StreetAddress")%>' Font-Size="12px" Font-Names="Verdana" Width="100%"></telerik:RadTextBox>
                    </div>
                </EditItemTemplate>
            </telerik:GridTemplateColumn>       
            <telerik:GridTemplateColumn HeaderText="City" DataField="City">                        
                <ItemStyle HorizontalAlign="Left" />        
                <HeaderStyle HorizontalAlign="Left" />                
                <ItemTemplate>                       
                    <%#Eval("City")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <div style="padding:5px 0px 5px 0px;">
                        <telerik:RadTextBox ID="txtCity" runat="server" Skin="Sunset" Text='<%#Bind("City")%>' Font-Size="12px" Font-Names="Verdana" Width="100%"></telerik:RadTextBox>
                    </div>
                </EditItemTemplate>
            </telerik:GridTemplateColumn>                             
            <telerik:GridTemplateColumn HeaderText="Country" DataField="CountryID">                        
                <ItemStyle HorizontalAlign="Center" />        
                <HeaderStyle HorizontalAlign="Center" />                
                <ItemTemplate>                       
                    <%#Eval("CountryName")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <div style="padding:5px 5px 5px 5px;">
                        <telerik:RadComboBox ID="ddlCountry" runat="server" Skin="Sunset" Font-Size="12px" Font-Names="Verdana" DataSourceID="ddsCountries" Height="200" DataTextField="CountryName" DataValueField="CountryID" Width="100%" SelectedValue='<%#Bind("CountryID")%>'></telerik:RadComboBox>                        
                    </div>
                </EditItemTemplate>
            </telerik:GridTemplateColumn>    
    </MasterTableView>
</telerik:RadGrid>           

【问题讨论】:

  • 你最好显示生成的html

标签: jquery asp.net radgrid autoresize inline-editing


【解决方案1】:

不需要 javascript,用 CSS 做 CSS

#ClientID_OF_GRID input[type="text"] {
 width: 100% !important;
}

在您的情况下,您的列将按内容调整大小,请执行此操作

 .grid-input {
     width: 100% !important;
    }

然后在列调整大小完成时调用此脚本

$('#grid_client_id input[type="text"]').setClass('grid-input');

【讨论】:

  • 这会在自动调整大小逻辑后生效吗?这是真正的问题 - 列正在使用 JavaScript 在渲染后调整大小。您会认为输入会自行缩放,因为宽度设置为 100%,但事实并非如此。
  • +1 这让我了解了其中的一部分,这总比没有好,但应用这种样式似乎会中止自动调整大小,它将列设置为相对于内容的宽度(所以地址字段的宽度大于邮政编码字段的宽度)。
  • 好的,我了解您的问题,您的脚本正在调整有关内容的列的大小,并且编辑框的宽度为 100%,因此不会调整字段的大小。所以你可以做的是按照我的帖子追加
  • 这就是我所说的——看起来很有希望。我会在几秒钟内通知你。
【解决方案2】:

我同意 Senad,CSS 是要走的路。

但是,如果您真的想要使用 JavaScript,这里是来自 docs 的 RadGrid 函数:

function ColumnResized(sender, eventArgs) {
    alert("Column with Index: " + 
     eventArgs.get_gridColumn().get_element().cellIndex + 
     " was resized, width: " + 
     eventArgs.get_gridColumn().get_element().offsetWidth);
}

并设置客户端设置:

<telerik:RadGrid ID="RadGrid1" runat="server">
    <ClientSettings>
        <Resizing AllowColumnResize="true" />
        <ClientEvents OnColumnResized="ColumnResized" />
    </ClientSettings>
</telerik:RadGrid>

ColumnResized JavaScript 函数内部,可以直接设置子控件。

【讨论】:

  • 如果你记得我的描述,这个问题与用户所做的调整大小无关(OnColumnResizedOnColumnResizing),而是它在渲染后完成的自动调整大小。这也是我对 CSS 方法有疑问的原因 - 输入已经设置为 100% 宽度,但是当发生自动调整大小时,输入不会缩放以适应调整后的列宽。
猜你喜欢
  • 2015-10-24
  • 1970-01-01
  • 2017-07-16
  • 2015-02-16
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
相关资源
最近更新 更多