RadGrid 使字段在编辑时不可见

RadGrid make field invisible on Edit

<telerik:RadGrid runat="server" ID="rdReport" AutoGenerateColumns="false" AllowPaging="true" Skin="Metro"  OnItemCommand="ItemCommand" OnItemDataBound="rdReport_ItemDataBound" OnPreRender="rdReport_PreRender" DataSourceID="FountainSource" AllowAutomaticUpdates="true" AllowAutomaticDeletes="true">
    <MasterTableView DataKeyNames="ID" CommandItemDisplay="None">
        <Columns>
            <telerik:GridEditCommandColumn ButtonType="ImageButton" />                                   
            <telerik:GridBoundColumn DataField="LocName" HeaderText="Location" ReadOnly="true" /> 
            <     
            <telerik:GridBoundColumn DataField="Field1Value" HeaderText="Custom Field1" />
            <telerik:GridBoundColumn DataField="Field2Value" HeaderText="Custom Field2" />
            <telerik:GridBoundColumn DataField="Field3Value" HeaderText="Custom Field3" />

            <telerik:GridButtonColumn ConfirmText="Delete?" ConfirmDialogType="RadWindow"
                ConfirmTitle="Delete" ButtonType="ImageButton" CommandName="Delete" />
        </Columns>
        <EditFormSettings>
            <EditColumn ButtonType="ImageButton" />
        </EditFormSettings>
    </MasterTableView>
    <PagerStyle Mode="NextPrevAndNumeric" />
</telerik:RadGrid>

在编辑时,我喜欢让一个字段不可见。 我正在使用以下有效的代码,但想检查它是否是最佳实践:

protected void rdReport_ItemDataBound(object sender, GridItemEventArgs e)
{
    // Edit Mode
    if ((e.Item is GridEditFormItem) && (e.Item.IsInEditMode))
    {
        GridEditFormItem fndColumn = (GridEditFormItem)e.Item;
        fnColumn["Field1Value"].Parent.Visible = false;
    }
}

这只是一个建议的替代方案。我曾与 telerik 合作过几次,至少可以说这是一种痛苦。您还可以向父容器添加第三条件。如果处于编辑模式,则显示 class,例如 'edit' 或 'current'。如果不处于编辑模式,则不显示 class。然后,在您的 CSS 中,您可以 select 隐藏任何要隐藏的元素。

<div>
<input type="text" id="whateverisgenerated" class="uniqueclass" />
</div>

然后,当处于编辑模式时,您将拥有

<div class="edit">
<input type="text" id="whateverisgenerated" class="uniqueclass" />
</div>

你的 CSS:

div.edit input.uniqueclass { display: none; }

至于您的 telerik 控件(我只是从您的代码中获取了一些东西),您可以执行以下操作来添加您的 class:

<telerik:GridButtonColumn ConfirmText="Delete?" ConfirmDialogType="RadWindow" ConfirmTitle="Delete" ButtonType="ImageButton" CommandName="Delete" CssClass="uniqueclass" />

我在上面的控件中添加了CssClass="uniqueclass"

我提供的只是一个例子。我希望你能找到它的用途。谢谢

您提供的解决方案是完美的,但如果您在每一列中也添加 UniqueName 属性 就更好了。如果我们不分配 UniqueName,则将 DataField 值视为 UniqueName。

ASPX

<telerik:GridButtonColumn DataField="Field1Value" HeaderText="Custom Field1" UniqueName="Field1Value" />

ASPX.CS

protected void rdReport_ItemDataBound(object sender, GridItemEventArgs e)
{
    // Edit Mode
    if ((e.Item is GridEditFormItem) && (e.Item.IsInEditMode))
    {
        GridEditFormItem fndColumn = (GridEditFormItem)e.Item;
        fnColumn["Field1Value"].Parent.Visible = false; // "Field1Value" is column uniquename
    }
}

如果您需要更多信息,请告诉我。