【问题标题】:Telerik RadInputManager integrated with RadGridTelerik RadInputManager 与 RadGrid 集成
【发布时间】:2015-01-21 17:15:46
【问题描述】:

我有一个用于编辑数据的“RadGrid”。

我已启用过滤。

我使用“RadInputManager”执行验证。

当我尝试更新更改时,“RadInputManager”也在验证“文本框”过滤器。

我该如何解决这个问题?

我添加代码“aspx”来显示示例:

<telerik:RadAjaxManager runat="server">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="RadGrid1">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="RadGrid1" UpdatePanelCssClass="" />
                <telerik:AjaxUpdatedControl ControlID="RadInputManager1" UpdatePanelCssClass="" />
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManager>
<telerik:RadScriptManager ID="RadScriptManager1" runat="server">
    <Scripts>
        <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js">
        </asp:ScriptReference>
        <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js">
        </asp:ScriptReference>
        <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js">
        </asp:ScriptReference>
    </Scripts>
</telerik:RadScriptManager>
        <telerik:RadInputManager ID="RadInputManager1" runat="server">
    <telerik:TextBoxSetting InitializeOnClient="False" ErrorMessage="Required!" Validation-IsRequired="True" Validation-ValidateOnEvent="Submit">
        <TargetControls>
            <telerik:TargetInput ControlID="RadGrid1" />
        </TargetControls>
    </telerik:TextBoxSetting>
</telerik:RadInputManager>

<telerik:RadGrid ID="RadGrid1" runat="server" AllowAutomaticDeletes="True" AllowAutomaticInserts="True" AllowAutomaticUpdates="True" AllowFilteringByColumn="True" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" AutoGenerateEditColumn="True" CellSpacing="0" DataSourceID="LinqDataSource1" EnableHeaderContextFilterMenu="True" EnableHeaderContextMenu="True" GridLines="None">
    <MasterTableView CommandItemDisplay="Top" DataKeyNames="RolId" DataSourceID="LinqDataSource1" EditMode="InPlace">
        <Columns>
            <telerik:GridBoundColumn DataField="Name" HeaderText="Name" SortExpression="Name" UniqueName="Name">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="Description" HeaderText="Description" SortExpression="Description" UniqueName="Description">
            </telerik:GridBoundColumn>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>
<asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="WebApplication1.DataClasses1DataContext" EntityTypeName="" TableName="Rol">
</asp:LinqDataSource>

谢谢,

德尔维斯

【问题讨论】:

  • 请解释您所说的“更新更改”是什么意思。
  • ... 诚然,我并没有在这种形式的验证上工作太多。但是,对我来说很明显,您不应该将整个 Grid 指定为目标输入控件。但是,我不确定您将如何在自动生成的编辑状态绑定控件上使用 RadInputManager。
  • 是的..我可以从查看 RadInputManager 和演示中看到,他们正在宣传针对 RadGrid,但随后不要在网格上使用过滤器.. 他们也没有在他们的示例演示.. demos.telerik.com/aspnet-ajax/input/examples/radinputmanager/… .. 在客户端或服务器代码中确定哪个控件正在引发验证事件应该不难。
  • 没有足够的积分放一张图片显示问题。 “更新更改”表示您要保存更改(“提交”)。我想在不使用太多额外代码的情况下使用 Telerik 控件。希望验证器只考虑那些具有相同 ValidationGroup 的控件。

标签: c# asp.net telerik


【解决方案1】:

看来您可以使用 RadGrid ItemCreated 事件动态地将验证行为添加到绑定控件,并声明 Telerik:TextBoxSetting 而不指定目标控件。

前端(标记)

  <telerik:RadInputManager ID="RadInputManager1" runat="server">
      <telerik:TextBoxSetting BehaviorID="TextBoxBehavior1"  InitializeOnClient="False" ErrorMessage="Required!" Validation-IsRequired="True" Validation-ValidateOnEvent="Submit">        
      </telerik:TextBoxSetting>
  </telerik:RadInputManager>

  <telerik:RadGrid ID="RadGrid1" runat="server" OnItemCreated="RadGrid1_ItemCreated" AllowAutomaticDeletes="True" AllowAutomaticInserts="True" AllowAutomaticUpdates="True" AllowFilteringByColumn="True" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" AutoGenerateEditColumn="True" CellSpacing="0" DataSourceID="LinqDataSource1" EnableHeaderContextFilterMenu="True" EnableHeaderContextMenu="True" GridLines="None">
      <MasterTableView CommandItemDisplay="Top" DataKeyNames="RolId" DataSourceID="LinqDataSource1" EditMode="InPlace">
          <Columns>
              <telerik:GridBoundColumn DataField="Name" HeaderText="Name" SortExpression="Name" UniqueName="Name">
              </telerik:GridBoundColumn>
              <telerik:GridBoundColumn DataField="Description" HeaderText="Description" SortExpression="Description" UniqueName="Description">
              </telerik:GridBoundColumn>
          </Columns>
      </MasterTableView>
  </telerik:RadGrid>

代码隐藏

 protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e)
{
    if (e.Item is GridEditableItem && e.Item.IsInEditMode)
    {
        GridEditFormItem editedItem = e.Item as GridEditFormItem;

        TextBoxSetting inputSettings = (DateInputSetting)RadInputManager1.GetSettingByBehaviorID("TextBoxBehavior1");

        RadTextBox tbName = editedItem.FindControl("tbName") as RadTextBox;
        RadTextBox tbDescription = editedItem.FindControl("tbDescription") as RadTextBox; 

        inputSettings.TargetControls.Add(new TargetInput(tbName.UniqueID, true));
        inputSettings.TargetControls.Add(new TargetInput(tbDescription.UniqueID, true));            
    }
}

注意 tbNametbDescription 很可能不存在。当然,每个数据字段都创建了一个文本框,但是如果将列保留为 telerik:GridBoundColumns...,则必须发现控件生成的名称是什么...替代方法是使用 GridTemplateColumn。

替代列(标记:RadGrid > MasterTableView > 列)

 <telerik:GridTemplateColumn HeaderText="Name" SortExpression="Name">
     <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem, "Name") %>
     </ItemTemplate>
     <EditItemTemplate>
         <telerik:RadTextBox ID="tbName" Width="60px" runat="server" Text='<%# Bind("Name")%>'>
         </telerik:RadTextBox>
     </EditItemTemplate>
 </telerik:GridTemplateColumn>
 <telerik:GridTemplateColumn HeaderText="Description" SortExpression="Description">
     <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem, "Description") %>
     </ItemTemplate>
     <EditItemTemplate>
         <telerik:RadTextBox Width="245px" ID="tbDescription" runat="server" TextMode="MultiLine" Resize="Both" Text='<%# Bind("Description")%>' EmptyMessage="type description"> 
         </telerik:RadTextBox>
     </EditItemTemplate>
 </telerik:GridTemplateColumn>

这应该对你有用,让我知道..我还没有进行测试。

【讨论】:

  • 请注意,您可能会使用 GridTemplateColumn 放弃整个动态行为和 itemCreated 方面,并让 telerik:TextBoxSetting 以控件为目标..您可能应该先尝试..这可能是更合适的答案。 .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多