2014-09-30 61 views
-1

在RadGrid內部的GridTemplateColumn中有一個RadnumericTextBox,我希望能夠在用戶可以更改之前將MinValue屬性設置爲正在編輯的初始值它。這個想法是,用戶可以繼續增加值,但一旦保存就不能減少它。如何將RadNumericTextBox的MinValue設置爲正在編輯的值

我一直在想出一些解決方案服務器端,但從我可以告訴網格模板列不是網格渲染的一部分。

<telerik:RadGrid ID="StudentGrid" AutoGenerateColumns="false" AllowFilteringByColumn="True" AllowSorting="True" AllowPaging="True" 
      OnNeedDataSource="StudentGrid_OnNeedDataSource" 
      runat="server"> 
    <telerik:GridTemplateColumn AllowFiltering="False" HeaderStyle-Width="25px" DataField="Sunday" 
      HeaderText="Sunday" UniqueName="SundayColumn"> 
     <EditItemTemplate> 
      <telerik:RadNumericTextBox ID="editTextBox" Type="Number" MinValue="0" MaxValue="9" 
       DisplayText='<%# Bind("Sunday") %>' AllowOutOfRangeAutoCorrect="true" runat="server"> 
      <NumberFormat GroupSeparator="" DecimalDigits="0"></NumberFormat> 
      </telerik:RadNumericTextBox> 
     </EditItemTemplate> 
     <ItemTemplate> 
      <%# DataBinder.Eval(Container.DataItem, "Sunday") %> 
     </ItemTemplate> 
    </telerik:GridTemplateColumn> 
</telerik:RadGrid> 

UPDATE:事實證明,網格模板的頁面上呈現一次,重複使用的每一個細胞,在該列。它被重新定位並實現在正在編輯的任何單元格的頂部。由於它沒有綁定到任何特定的單元格,因此在頁面呈現之前沒有關於正在編輯的單元格的相關信息。請參閱下面的我的客戶端解決方案。

+0

羅蘭,這與[標籤:asp-classic]無關。請[瞭解其中的差異](http://www.dotnetspider.com/tutorials/AspNet-Tutorial-26.aspx)。 – Paul 2014-10-01 08:16:30

回答

0

解決方案是與OnFocus/OnBlur Ra​​dNumerictextBox事件一起攔截客戶端OnCellSelecting網格事件。

<telerik:RadGrid ID="StudentGrid" AutoGenerateColumns="false" AllowFilteringByColumn="True" AllowSorting="True" AllowPaging="True" 
    OnNeedDataSource="StudentGrid_OnNeedDataSource" 
    runat="server"> 
    <ClientSettings> 
     <Selecting CellSelectionMode="SingleCell"></Selecting> 
     <ClientEvents OnCellSelecting="StudentGrid_OnCellSelecting"/> 
    </ClientSettings> 
    <telerik:GridTemplateColumn AllowFiltering="False" HeaderStyle-Width="25px" DataField="Sunday" 
      HeaderText="Sunday" UniqueName="SundayColumn"> 
     <EditItemTemplate> 
      <telerik:RadNumericTextBox ID="editTextBox" Type="Number" MinValue="0" MaxValue="9" 
       DisplayText='<%# Bind("Sunday") %>' AllowOutOfRangeAutoCorrect="true" runat="server"> 
      <NumberFormat GroupSeparator="" DecimalDigits="0"></NumberFormat> 
      <ClientEvents OnFocus="onEditTextBoxFocus" OnBlur="onEditTextBoxBlur"></ClientEvents> 
      </telerik:RadNumericTextBox> 
     </EditItemTemplate> 
     <ItemTemplate> 
      <%# DataBinder.Eval(Container.DataItem, "Sunday") %> 
     </ItemTemplate> 
    </telerik:GridTemplateColumn> 
</telerik:RadGrid> 

然後添加這些javascript事件處理程序。

<script type="text/javascript"> 
    function onEditTextBoxFocus(sender, eventArgs) 
    { 
     // sender is the RadNumericTextBox and does not contain any information 
     // about the grid row so we have to look at it's parent to get the 
     // grid row cells 
     var cells = sender.get_parent().get_element().cells; 
     // Switch from Telerik to jQuery to locate selected cell and get it's initial value 
     var selectedCell = $(cells).filter('.rgSelectedCell'); 
     var initialValue = selectedCell.attr("InitialValue"); 
     sender.set_minValue(initialValue); 
    } 

    function onEditTextBoxBlur(sender, eventArgs) 
    { 
     // Have to reset this value because it's interfering with 
     //validation on next cell being edited 
     sender.set_minValue(0); 
    } 

    function StudentGrid_OnCellSelecting(sender, eventArgs) 
    { 
     // Get the grid cell being selected 
     var columnName = eventArgs.get_column().get_uniqueName(); 
     var data = eventArgs.get_gridDataItem(); 
     var cell = data.get_cell(columnName); 
     var initialValue = cell.getAttribute("InitialValue"); 
     // Set inital value if it doesn't already exist 
     if (initialValue == null) 
     { 
      var cellValue = cell.innerText.charAt(0); 
      if (cellValue == '') cellValue = 0; 
      // Set an InitialValue attribute in the cell about to be edited 
      // This will be picked up by the RadNumericTextBox when it gets focus (see above) 
      cell.setAttribute("InitialValue", cellValue); 
     } 
    } 
</script> 

的OnCellSelecting事件處理程序火災(第一)上的細胞選擇和編輯中的網格單元的與InitialValue屬性開始,並將其存儲之前捕獲單元的初始值。這是必需的,因爲使用相同的RadNumericTextBox來編輯使用網格模板的每個單元格。

稍後,當RadNumerictextBox獲得焦點時,將從網格單元屬性中檢索初始值並將其應用於RadNumerictextBox的MinValue。當RadNumericTextBox失去焦點時,MinValue需要重置爲0,因爲它似乎繼續驗證下一個編輯的單元格。

相關問題