2015-01-06 38 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时,它实际上已经在那里了。 –

相关问题