2015-01-06 36 views
0

我已經看到很多問題接近這個,但還沒有找到我的答案。下面是我下面的例子中的關鍵點:在radgrid中綁定radcombobox的首選方法是什麼?

  • radgrid控件具有GridTemplateColumn
  • GridTemplateColumn有一個radcombobox控件在它的EditItemTemplate中
  • radcombobox控件綁定到一個ObjectDataSource並有一個RequiredFieldValidator
  • 的SelectedValue =」 <% #Bind(「SomeValue」)%>'似乎可行但會導致驗證問題
  • 設置ItemDataBound事件中的RadComboBox1.SelectedValue似乎正在工作

是否與ItemDataBound中的代碼綁定是最好的方法?有趣的是,在aspx頁面上設置SelectedValue ='<%#Bind(「SomeValue」)%>'具有SelectedValue,當我獲得ItemDataBound時已經設置了它,但由於某種原因,編輯模式下的RequiredFieldValidator在執行此操作時失敗除非我在ItemDataBound中設置了AGAIN的值。以下是我的代碼的簡化版本。

<telerik:RadGrid ID="rgTasks" runat="server" AllowAutomaticInserts="false" AllowAutomaticUpdates="false" AutoGenerateColumns="False"> 
    <MasterTableView DataKeyNames="Id"> 
     <CommandItemSettings ShowRefreshButton="False"></CommandItemSettings>     
     <Columns> 
      <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditCommandColumn"></telerik:GridEditCommandColumn> 
      <telerik:GridBoundColumn DataField="Id" ReadOnly="True" UniqueName="Id" DataType="System.Int32" Visible="false"></telerik:GridBoundColumn> 
      <telerik:GridTemplateColumn UniqueName="TaskTypeId" HeaderText="Task" DataField="TaskTypeId" DefaultInsertValue=""> 
       <ItemTemplate> 
        <%# Eval("TaskType.Name")%> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <telerik:RadComboBox ID="rcbTaskTypeId" runat="server" EmptyMessage="Select TaskType..." 
         DataSourceID="odsTaskTypes" DataValueField="Id" DataTextField="Name" SelectedValue='<%#Bind("TaskTypeId")%>'> 
        </telerik:RadComboBox> 
        <asp:RequiredFieldValidator ID="rfvTaskTypeId" runat="server" ControlToValidate="rcbTaskTypeId" ErrorMessage="Task Type is required" Display="Dynamic"></asp:RequiredFieldValidator> 
       </EditItemTemplate> 
      </telerik:GridTemplateColumn> 
     </Columns> 
    </MasterTableView> 
</telerik:RadGrid> 

<asp:ObjectDataSource ID="odsTaskTypes" runat="server" SelectMethod="GetTaskTypes" TypeName="CAPAModel.CAPARepo.DataRepo"></asp:ObjectDataSource> 

Protected Sub rgTasks_ItemDataBound(sender As Object, e As GridItemEventArgs) Handles rgTasks.ItemDataBound 
    If ((TypeOf e.Item Is GridEditableItem) AndAlso e.Item.IsInEditMode) Then 
     If Not String.IsNullOrEmpty(DataBinder.Eval(e.Item.DataItem, "TaskTypeId").ToString) Then 
      Dim rcbTaskTypeId As RadComboBox = e.Item.FindControl("rcbTaskTypeId") 
      rcbTaskTypeId.SelectedValue = DataBinder.Eval(e.Item.DataItem, "TaskTypeId") 
     End If 
    End If 
End Sub 

我看到一些相關的問題,但我正在尋找一個解釋,我應該如何做到這一點,爲什麼。謝謝。

回答

0

所以,我來回走了Telerik的與支持就這個問題和他們的建議是,只是做我做的方式它。考慮到我在綁定代碼控制,我也許可以擺脫SelectedValue='<%#Bind("TaskTypeId")%>'像這樣:

<telerik:RadComboBox ID="rcbTaskTypeId" runat="server" 
    DataSourceID="odsTaskTypes" DataValueField="Id" DataTextField="Name" > 
</telerik:RadComboBox> 

...然後只保留代碼是:

Protected Sub rgTasks_ItemDataBound(sender As Object, e As GridItemEventArgs) Handles rgTasks.ItemDataBound 
    If ((TypeOf e.Item Is GridEditableItem) AndAlso e.Item.IsInEditMode) Then 
     If Not String.IsNullOrEmpty(DataBinder.Eval(e.Item.DataItem, "TaskTypeId").ToString) Then 
      Dim rcbTaskTypeId As RadComboBox = e.Item.FindControl("rcbTaskTypeId") 
      rcbTaskTypeId.SelectedValue = DataBinder.Eval(e.Item.DataItem, "TaskTypeId") 
     End If 
    End If 
End Sub 
0

發生錯誤是因爲您已將兩個不同的數據字段設置爲DataValueField和SelectedValue。我想你想在DataValueField和DataTextField中顯示另一個字段,而不是數據。請看看下面的代碼片段。

ASPX:

<telerik:GridTemplateColumn DataField="test" FilterControlAltText="Filter RegistryValue column" HeaderText="test" SortExpression="test" UniqueName="test"> 
      <EditItemTemplate> 
       <telerik:RadComboBox ID="RadComboBox1" Runat="server" DataSourceID="odsTaskTypes" DataTextField="Name" DataValueField="Id" > 
       </telerik:RadComboBox> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="RegistryValueLabel" runat="server" Text='<%# Eval("RegistryValue") %>'></asp:Label> 
      </ItemTemplate> 
</telerik:GridTemplateColumn> 

C#:

protected void gridiew1_ItemDataBound(object sender, GridItemEventArgs e) 
{ 
    if (e.Item is GridEditableItem && e.Item.IsInEditMode) 
    { 
     GridEditableItem editItem = (GridEditableItem)e.Item; 
     RadComboBox combo = (RadComboBox)editItem.FindControl("RadComboBox1"); 
     combo.SelectedItem.Text = (string)DataBinder.Eval(e.Item.DataItem, "TaskTypeId").ToString();  
    }  
} 
+0

感謝迴應,Saritha。我應該更清楚,並編輯了我的問題。上面的代碼功能正常。但是,如果我不重置ItemDataBound中的RadComboBox1.SelectedValue,那麼RequiredFieldValidator將不正確地觸發,除非更改RadComboBox中的值。奇怪的是,當我重置SelectedValue時,它實際上已經在那裏了。 –

相關問題