【问题标题】:Telerik RadGrid Setting Cell Value When Another is Changed Client SideTelerik RadGrid 在客户端更改另一个时设置单元格值
【发布时间】:2014-08-07 23:56:58
【问题描述】:

我有一个 RadGrid,其中某些列处于批量编辑模式。我还有两列依赖于另一列的值(EstLengthFt 和 EstLengthRds)。我需要在编辑 EstLengthFt 单元格时更新 EstLengthRds 值,反之亦然。 我当前的函数只更新 html 而不是值。我需要更新控件的值并将其设置为 BatchEditChanged 模式,以便我可以保存它。

我无法进行任何回发,因为编辑后的值会丢失。

任何帮助将不胜感激!

    function AllSetCellValue(sender, args) {
                var grid;
                var master;
                var selected;
                var row;
                var ft;
                var cell;
                var rods;
                if (args.get_columnUniqueName() == "EstLengthFt") {
                    grid = $find('<%=RadGridAll.ClientID%>');
                    master = grid.get_masterTableView();
                    selected = master.get_selectedItems();
                    row = selected[0];
                    ft = args.get_value();
                    cell = master.getCellByColumnUniqueName(row, "EstLengthRds");
                    rods = Math.round((ft * .060606060606) * 100) / 100;
                    cell.innerHTML = rods;
                }
                if (args.get_columnUniqueName() == "EstLengthRds") {
                    grid = $find('<%=RadGridAll.ClientID%>');
                    master = grid.get_masterTableView();
                    selected = master.get_selectedItems();
                    row = selected[0];
                    rods = args.get_value();
                    cell = master.getCellByColumnUniqueName(row, "EstLengthFt");
                    ft = Math.round((rods * 16.5) * 100) / 100;
                    cell.innerHTML = ft;
                 }
            }

<telerik:RadGrid runat="server" ID="RadGridAll" AllowMuliRowEdit="True" AllowMultiRowSelection="True" AllowSorting="True"
                GridLines="None" AllowFilteringByColumn="True" AllowMultiRowEdit="True" OnNeedDataSource="GridAll_NeedDataSource"
                OnBatchEditCommand="GridAll_BatchEditComand" AllowPaging="True" PageSize="20" EnableLinqExpressions="False"
                OnHTMLExporting="GridAll_HTMLExporting">
                <MasterTableView DataKeyNames="PropId,RowDetailsId,SurveyId,TitleInitId,TitleSumId" CommandItemDisplay="None"
                    AllowAutomaticUpdates="False" AllowAutomaticInserts="False" AllowAutomaticDeletes="False"
                    AutoGenerateColumns="False" TableLayout="Fixed" EditMode="Batch">
                    <BatchEditingSettings EditType="Cell" OpenEditingEvent="Click" />
                    <Columns>
                        <telerik:GridBoundColumn DataField="PropertyNumber" HeaderText="Tract Number" ReadOnly="True" HeaderStyle-Width="140px"
                            FilterControlWidth="100px" />
                        <telerik:GridBoundColumn DataField="IndexNumber" HeaderText="Index Number" ReadOnly="True" HeaderStyle-Width="120px"
                            FilterControlWidth="80px" />
                        <telerik:GridBoundColumn DataField="DisplayName" HeaderText="Type" ReadOnly="True" HeaderStyle-Width="140px"
                            UniqueName="DisplayName">
                            <FilterTemplate>
                                <telerik:RadComboBox runat="server" Width="130px" EmptyMessage="All" AutoPostBack="True"
                                    OnSelectedIndexChanged="GridPropTypeFilter_SelectedIndexChanged" EnableLoadOnDemand="True"
                                    OnItemsRequested="GridPropTypeCombo_ItemsRequested" AppendDataBoundItems="True" />
                            </FilterTemplate>
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn DataField="OwnerName" HeaderText="Owner Name" ReadOnly="True" HeaderStyle-Width="140px"
                            FilterControlWidth="100px" />
                        <telerik:GridTemplateColumn DataField="EstLengthFt" HeaderText="Est ROW Length(ft)" HeaderStyle-Width="100px"
                            FilterControlWidth="60px" ConvertEmptyStringToNull="True" UniqueName="EstLengthFt">
                            <ItemTemplate>
                                <%#Eval("EstLengthFt") %>
                            </ItemTemplate>
                            <EditItemTemplate>
                                <telerik:RadNumericTextBox runat="server" ID="txtEstLengthFt" Type="Number" NumberFormat-DecimalDigits="2"/>
                            </EditItemTemplate>
                        </telerik:GridTemplateColumn>
                        <telerik:GridTemplateColumn DataField="EstLengthRds" HeaderText="Est ROW Length(rds)" HeaderStyle-Width="100px"
                            FilterControlWidth="60px" ConvertEmptyStringToNull="True" UniqueName="EstLengthRds">
                            <ItemTemplate>
                                <%#Eval("EstLengthRds") %>
                            </ItemTemplate>
                            <EditItemTemplate>
                                <telerik:RadNumericTextBox runat="server" ID="txtEstLengthRds" Type="Number" NumberFormat-DecimalDigits="2" />
                            </EditItemTemplate>
                        </telerik:GridTemplateColumn>
                        <telerik:GridBoundColumn DataField="Name" HeaderText="Address" HeaderStyle-Width="200px"
                            FilterControlWidth="160px" ReadOnly="True" />
                        <telerik:GridBoundColumn DataField="Legal" HeaderText="Legal Description" HeaderStyle-Width="170px"
                            FilterControlWidth="130px" ReadOnly="True" />
                        <telerik:GridBoundColumn DataField="Status" HeaderText="Status" ReadOnly="True" HeaderStyle-Width="120px"
                            FilterControlWidth="80px" ConvertEmptyStringToNull="True" />
                        <telerik:GridTemplateColumn UniqueName="PermWidthDd" DataField="PermWidthDd" HeaderText="Perm Width(ft)" HeaderStyle-Width="100px"
                            FilterControlWidth="60px">
                            <ItemTemplate>
                                <%#Eval("PermWidthDd") %>
                            </ItemTemplate>
                            <EditItemTemplate>
                                <telerik:RadComboBox runat="server" ID="cmbGridPermitFt"
                                    DataTextField="DDName" DataValueField="DDValue" Width="90px" EnableLoadOnDemand="True"
                                    OnItemsRequested="GridPermitCombo_ItemsRequested" />
                            </EditItemTemplate>
                        </telerik:GridTemplateColumn>
                        <telerik:GridTemplateColumn HeaderText="Temp Width(ft)" HeaderStyle-Width="100px"
                            FilterControlWidth="60px" UniqueName="TempWidthDd">
                            <ItemTemplate>
                                <%#Eval("TempWidthDd") %>
                            </ItemTemplate>
                            <EditItemTemplate>
                                <telerik:RadComboBox runat="server" ID="cmbGridTemFt"
                                    DataTextField="DDName" DataValueField="DDValue" Width="90px" EnableLoadOnDemand="True"
                                    OnItemsRequested="GridTempCombo_ItemsRequested" />
                            </EditItemTemplate>
                        </telerik:GridTemplateColumn>
                        <telerik:GridDateTimeColumn DataField="TractClosedDate" HeaderText="Tract Closed" HeaderStyle-Width="170px"
                            FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText=""
                            DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" />
                        <telerik:GridBoundColumn DataField="ServiceProviderName" HeaderText="Company Assigned" HeaderStyle-Width="170px"
                            FilterControlWidth="130px" ReadOnly="True" />
                        <telerik:GridDateTimeColumn DataField="SurveyAssigned" HeaderText="Survey Assigned Date" HeaderStyle-Width="170px"
                            FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText="" ReadOnly="True"
                            DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" />
                        <telerik:GridDateTimeColumn DataField="SurveyPermDate" HeaderText="Permission Date" HeaderStyle-Width="170px"
                            FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText=""
                            DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" />
                        <telerik:GridDateTimeColumn DataField="FieldWorkCompleteDate" HeaderText="Field Work Completed" HeaderStyle-Width="170px"
                            FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText=""
                            DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" />
                        <telerik:GridDateTimeColumn DataField="FinalPlatRecvdDate" HeaderText="Final Plat Received" HeaderStyle-Width="170px"
                            FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText=""
                            DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" />
                        <telerik:GridDateTimeColumn DataField="CreatedDate" HeaderText="Title Work Assigned" HeaderStyle-Width="170px"
                            FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText="" ReadOnly="True"
                            DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" />
                        <telerik:GridBoundColumn HeaderText="Title Status" DataField="StatusDd" HeaderStyle-Width="170px"
                            FilterControlWidth="130px" ReadOnly="True" />
                        <telerik:GridDateTimeColumn DataField="DateLtcCompleted" HeaderText="Title Completed" HeaderStyle-Width="170px"
                            FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText=""
                            DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" />
                        <telerik:GridBoundColumn DataField="TitleAgent" HeaderText="Title Agent Assigned" HeaderStyle-Width="170px"
                            FilterControlWidth="130px" ReadOnly="True" />
                        <telerik:GridDateTimeColumn DataField="AgentAssignedDate" HeaderText="Agent Assigned Date" HeaderStyle-Width="170px"
                            FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText="" ReadOnly="True"
                            DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" />
                    </Columns>
                </MasterTableView>
                <ClientSettings Selecting-AllowRowSelect="True">
                    <ClientEvents OnBatchEditSetCellValue="AllSetCellValue" />
                    <Scrolling AllowScroll="True" FrozenColumnsCount="2" UseStaticHeaders="True" SaveScrollPosition="True" />
                </ClientSettings>
            </telerik:RadGrid>

【问题讨论】:

    标签: asp.net telerik


    【解决方案1】:

    查看 BatchEditingManager 提供的客户端 API,看看您是否可以将其组合在一起:http://www.telerik.com/help/aspnet-ajax/grid-batch-editing.html。本文的第三部分介绍客户端 API。

    【讨论】:

      【解决方案2】:

      我能够通过在组合框模板列中使用 OnValueChanging 事件来解决此问题。 我还添加了两个隐藏列来存储原始值,以便进行比较并确定更改了哪个单元格。 唯一的问题是,当值更改时,组合框会再次触发 OnValueChanging 事件并创建一个连续循环。在更改值以防止这种情况后,我向组合框添加了一个 .Set 标志。下面的代码解决了我的问题。

      function AllConvertValue(sender, args) {
              var grid = $find('<%=RadGridAll.ClientID%>');
              var master = grid.get_masterTableView();
              var getRow = master.get_selectedItems()[0];
              var row = master.get_dataItems()[getRow._itemIndex];
              var cellFt = row.findControl("txtEstLengthFt");
              var cellRds = row.findControl("txtEstLengthRds");
              var oldFt = row.findControl("OldFtValue");
              var oldRds = row.findControl("OldRdsValue");
              if (cellFt != null && cellRds != null) {
                  if (oldFt._value != cellFt._value) {
                      var rods = (cellFt._value * 0.060606061).toFixed(2);
                      if (cellRds.Set != true) {
                          cellRds.Set = true;
                          cellRds.set_value(rods);
                      }
                      if (oldRds.Set != true) {
                          oldRds.Set = true;
                          oldRds.set_value(cellRds._value);
                      }
                      if (cellFt.Set != true) {
                          cellFt.Set = true;
                          cellFt.set_value(cellFt._value);
                      }
                      if (oldFt.Set != true) {
                          oldFt.Set = true;
                          oldFt.set_value(cellFt._value);
                      }
                  }
                  if (oldRds._value != cellRds._value) {
                      var ft = (cellRds._value * 16.500033).toFixed(2);
                      if (cellFt.Set != true) {
                          cellFt.Set = true;
                          cellFt.set_value(ft);
                      }
                      if (oldFt.Set != true) {
                          oldFt.Set = true;
                          oldFt.set_value(cellFt._value);
                      }
                      if (cellRds.Set != true) {
                          cellRds.Set = true
                          cellRds.set_value(cellRds._value);
                      }
                      if (oldRds.Set != true) {
                          oldRds.Set = true;
                          oldRds.set_value(cellRds._value);
                      }
                  }
                  if (oldFt._value == cellFt._value && oldRds._value == cellRds._value) {
                      cellFt.Set = false;
                      cellRds.Set = false;
                      oldFt.Set = false;
                      oldRds.Set = false;
                  }
              }
          }
      
      
      <telerik:RadGrid runat="server" ID="RadGridAll" AllowMuliRowEdit="True" AllowMultiRowSelection="True" AllowSorting="True"
                  GridLines="None" AllowFilteringByColumn="True" AllowMultiRowEdit="True" OnNeedDataSource="GridAll_NeedDataSource"
                  OnBatchEditCommand="GridAll_BatchEditComand" AllowPaging="True" PageSize="20" EnableLinqExpressions="False"
                  OnHTMLExporting="GridAll_HTMLExporting">
                  <MasterTableView DataKeyNames="PropId,RowDetailsId,SurveyId,TitleInitId,TitleSumId" CommandItemDisplay="None"
                      AllowAutomaticUpdates="False" AllowAutomaticInserts="False" AllowAutomaticDeletes="False"
                      AutoGenerateColumns="False" TableLayout="Fixed" EditMode="Batch">
                      <BatchEditingSettings EditType="Row" OpenEditingEvent="Click" />
                      <Columns>
                          <telerik:GridBoundColumn DataField="PropertyNumber" HeaderText="Tract Number" ReadOnly="True" HeaderStyle-Width="120px"
                              FilterControlWidth="80px" MaxLength="50" />
                          <telerik:GridBoundColumn DataField="IndexNumber" HeaderText="Index Number" ReadOnly="True" HeaderStyle-Width="110px"
                              FilterControlWidth="70px" MaxLength="50" />
                          <telerik:GridBoundColumn DataField="DisplayName" HeaderText="Type" ReadOnly="True" HeaderStyle-Width="140px"
                              UniqueName="DisplayName" MaxLength="50">
                              <FilterTemplate>
                                  <telerik:RadComboBox runat="server" Width="130px" EmptyMessage="All" AutoPostBack="True"
                                      OnSelectedIndexChanged="GridPropTypeFilter_SelectedIndexChanged" EnableLoadOnDemand="True"
                                      OnItemsRequested="GridPropTypeCombo_ItemsRequested" AppendDataBoundItems="True" />
                              </FilterTemplate>
                          </telerik:GridBoundColumn>
                          <telerik:GridBoundColumn DataField="OwnerName" HeaderText="Owner Name" ReadOnly="True" HeaderStyle-Width="140px"
                              FilterControlWidth="100px" MaxLength="50" />
                          <telerik:GridTemplateColumn DataField="EstLengthFt" HeaderText="Est ROW Length(ft)" HeaderStyle-Width="140px"
                              FilterControlWidth="100px" ConvertEmptyStringToNull="True" UniqueName="EstLengthFt">
                              <ItemTemplate>
                                  <%#Eval("EstLengthFt") %>
                              </ItemTemplate>
                              <EditItemTemplate>
                                  <telerik:RadNumericTextBox runat="server" ID="txtEstLengthFt" Type="Number" MaxLength="50" Width="130px"
                                      ClientEvents-OnValueChanged="AllConvertValue" />
                              </EditItemTemplate>
                          </telerik:GridTemplateColumn>
                          <telerik:GridTemplateColumn DataField="EstLengthFt" UniqueName="OldFtValue" Display="False">
                              <ItemTemplate>
                                  <telerik:RadNumericTextBox runat="server" ID="OldFtValue" Type="Number" ReadOnly="True"
                                      ClientEvents-OnValueChanged="AllConvertValue" Text='<%#Bind("EstLengthFt") %>' />
                              </ItemTemplate>
                          </telerik:GridTemplateColumn>
                          <telerik:GridTemplateColumn DataField="EstLengthRds" HeaderText="Est ROW Length(rds)" HeaderStyle-Width="140px"
                              FilterControlWidth="100px" ConvertEmptyStringToNull="True" UniqueName="EstLengthRds">
                              <ItemTemplate>
                                  <%#Eval("EstLengthRds") %>
                              </ItemTemplate>
                              <EditItemTemplate>
                                  <telerik:RadNumericTextBox runat="server" ID="txtEstLengthRds" Type="Number" MaxLength="50" Width="130px"
                                      ClientEvents-OnValueChanged="AllConvertValue" />
                              </EditItemTemplate>
                          </telerik:GridTemplateColumn>
                          <telerik:GridTemplateColumn DataField="EstLengthRds" UniqueName="OldRdsValue" Display="False" ReadOnly="True">
                              <ItemTemplate>
                                  <telerik:RadNumericTextBox runat="server" ID="OldRdsValue" Type="Number"
                                      ClientEvents-OnValueChanged="AllConvertValue" Text='<%#Bind("EstLengthRds") %>' />
                              </ItemTemplate>
                          </telerik:GridTemplateColumn>
                          <telerik:GridBoundColumn DataField="Name" HeaderText="Address" HeaderStyle-Width="200px"
                              FilterControlWidth="160px" ReadOnly="True" MaxLength="50" />
                          <telerik:GridBoundColumn DataField="Legal" HeaderText="Legal Description" HeaderStyle-Width="170px"
                              FilterControlWidth="130px" ReadOnly="True" MaxLength="50" />
                          <telerik:GridBoundColumn DataField="AgentAssigned" HeaderText="Agent Assigned" HeaderStyle-Width="170px"
                              FilterControlWidth="130px" ReadOnly="True" MaxLength="50" />
                          <telerik:GridDateTimeColumn DataField="AssignedDate" HeaderText="Assigned Date" HeaderStyle-Width="170px"
                              FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText="" ReadOnly="True"
                              DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" MaxLength="50" />
                          <telerik:GridBoundColumn DataField="Status" HeaderText="Status" ReadOnly="True" HeaderStyle-Width="130px"
                              ConvertEmptyStringToNull="True" MaxLength="50">
                              <FilterTemplate>
                                  <telerik:RadComboBox ID="RadComboBox1" runat="server" Width="120px" EmptyMessage="All" AutoPostBack="True"
                                      OnSelectedIndexChanged="GridStatusFilter_SelectedIndexChanged" EnableLoadOnDemand="True"
                                      OnItemsRequested="GridStatusCombo_ItemsRequested" AppendDataBoundItems="True" />
                              </FilterTemplate>
                          </telerik:GridBoundColumn>
                          <telerik:GridTemplateColumn UniqueName="PermWidthDd" DataField="PermWidthDd" HeaderText="Perm Width(ft)" HeaderStyle-Width="100px"
                              FilterControlWidth="60px">
                              <ItemTemplate>
                                  <%#Eval("PermWidthDd") %>
                              </ItemTemplate>
                              <EditItemTemplate>
                                  <telerik:RadComboBox runat="server" ID="cmbGridPermitFt"
                                      DataTextField="DDName" DataValueField="DDValue" Width="90px" EnableLoadOnDemand="True"
                                      OnItemsRequested="GridPermitCombo_ItemsRequested" />
                              </EditItemTemplate>
                          </telerik:GridTemplateColumn>
                          <telerik:GridTemplateColumn HeaderText="Temp Width(ft)" HeaderStyle-Width="100px"
                              FilterControlWidth="60px" UniqueName="TempWidthDd">
                              <ItemTemplate>
                                  <%#Eval("TempWidthDd") %>
                              </ItemTemplate>
                              <EditItemTemplate>
                                  <telerik:RadComboBox runat="server" ID="cmbGridTemFt"
                                      DataTextField="DDName" DataValueField="DDValue" Width="90px" EnableLoadOnDemand="True"
                                      OnItemsRequested="GridTempCombo_ItemsRequested" />
                              </EditItemTemplate>
                          </telerik:GridTemplateColumn>
                          <telerik:GridDateTimeColumn DataField="TractClosedDate" HeaderText="Tract Closed" HeaderStyle-Width="170px"
                              FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText=""
                              DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" MaxLength="50" />
                          <telerik:GridBoundColumn DataField="ServiceProviderName" HeaderText="Company Assigned" HeaderStyle-Width="170px"
                              FilterControlWidth="130px" ReadOnly="True" MaxLength="50" />
                          <telerik:GridDateTimeColumn DataField="SurveyAssigned" HeaderText="Survey Assigned Date" HeaderStyle-Width="170px"
                              FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText="" ReadOnly="True"
                              DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" MaxLength="50" />
                          <telerik:GridDateTimeColumn DataField="SurveyPermDate" HeaderText="Permission Date" HeaderStyle-Width="170px"
                              FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText=""
                              DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" MaxLength="50" />
                          <telerik:GridDateTimeColumn DataField="FieldWorkCompleteDate" HeaderText="Field Work Completed" HeaderStyle-Width="170px"
                              FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText=""
                              DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" MaxLength="50" />
                          <telerik:GridDateTimeColumn DataField="FinalPlatRecvdDate" HeaderText="Final Plat Received" HeaderStyle-Width="170px"
                              FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText=""
                              DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" MaxLength="50" />
                          <telerik:GridDateTimeColumn DataField="CreatedDate" HeaderText="Title Work Assigned" HeaderStyle-Width="170px"
                              FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText="" ReadOnly="True"
                              DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" MaxLength="50" />
                          <telerik:GridBoundColumn HeaderText="Title Status" DataField="TitleStatus" HeaderStyle-Width="170px"
                              FilterControlWidth="130px" ReadOnly="True" MaxLength="50" />
                          <telerik:GridDateTimeColumn DataField="DateLtcCompleted" HeaderText="Title Completed" HeaderStyle-Width="170px"
                              FilterControlWidth="130px" PickerType="DatePicker" EmptyDataText=""
                              DataFormatString="<%$ Resources:WebResources,dateFormatGrid %>" MaxLength="50" />
                          <telerik:GridBoundColumn DataField="TitleAgentAssigned" HeaderText="Title Agent Assigned" HeaderStyle-Width="500px"
                              FilterControlWidth="150px" ReadOnly="True" MaxLength="50"/>
                      </Columns>
                  </MasterTableView>
                  <ClientSettings Selecting-AllowRowSelect="True" ClientEvents-OnGridCreated="OnAllGridCreated">
                      <Scrolling AllowScroll="True" FrozenColumnsCount="2" UseStaticHeaders="True" SaveScrollPosition="True" />
                  </ClientSettings>
              </telerik:RadGrid>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多