2016-08-01 81 views
0

我工作的一个现有的项目,做了一些更新和有烦恼,在“FenDropDownListRoles”控制设置“FenSelectedValue”的价值。数据绑定问题与评估和演示/绑定 - C#Web表单asp.net

我不断收到错误:

Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control in repeater control 

但在Label控件中的eval正常工作。我一直在这里和那里阅读,而且我在适当的时候阅读了有关它的约束,因此我将控件从“EditItemTemplate”移到了“ItemTemplate”,以便测试它,但仍然没有运气。

   <ItemTemplate> 
        <asp:Label ID="lblRolOmschrijving" Text='<%# Eval("Rol_omschrijving") %>' runat="server" /> 
        <fen:FenDropDownListRoles ID="ddlRoles" FenSelectedValue='<%# Eval("Rol_omschrijving") %>' runat="server" Watermark="AdministratorType" Required="true" ValidationGroup="grpAddUser" /> 
       </ItemTemplate> 
+0

请问,如果你使用内置的'DropDownList'工作? – mxmissile

+0

还没有尝试过,会尝试,但它有点重构。自定义一个(已经存在)获取自身 – Lonefish

+0

填充这应该告诉你从哪里开始寻找,如果它不那么变化问题是在'FenDropDownListRoles'某处后失效。 – mxmissile

回答

1

以下是我学会如何在网格视图中设置下拉选定项目的方法。

示例格:

 <div id="gridContainerFormulations"> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       //This is done here, instead of codebehind, because the SelectedValue property of the drop down list 
       //simply does not work when databinding. I set the two 'hid' values via the RowEditing event 
       $("[id$='drpLotNumber']").val($("#hidSelectedFormulationLotNo").val()); 
      }); 
     </script> 
     <asp:hiddenfield runat="server" id="hidSelectedFormulationLotNo" value="-1" /> 
     <asp:gridview id="dgrStudyFormulations" cssclass="data" runat="server" allowpaging="False" autogeneratecolumns="False" 
      datakeynames="Id, FormulationLotNo, FormulationNo"> 
       <Columns> 
        <asp:BoundField HeaderText="Formulation" ReadOnly="True" DataField="FormulationName" /> 
        <asp:TemplateField HeaderText="Lot #"> 
         <EditItemTemplate> 
          <asp:dropdownlist ID="drpLotNumber" AddBlank="False" runat="server" /> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="lblLotNumber" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "FormulationLot.Name")%>' /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:BoundField HeaderText="AI in Formulation" ReadOnly="True" DataField="ActiveIngredientName" /> 
        <asp:TemplateField HeaderText="AI Of Interest"> 
         <EditItemTemplate> 
          <asp:CheckBox ID="chkOfInterest" Checked='<%# DataBinder.Eval(Container.DataItem, "OfInterest")%>' runat="server" /> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <%--<asp:Label ID="lblOfInterest" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "OfInterest")%>' />--%> 
          <asp:image runat="server" id="imgOfInterest" Visible="False" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:BoundField HeaderText="AI Amount" ReadOnly="True" DataField="AIAmountText" /> 
        <asp:CommandField ShowEditButton="True" ShowCancelButton="True" ShowDeleteButton="True"/> 
       </Columns> 
     </asp:gridview> 

然后在网格的row_editing事件:

SelectedFormulationLotNo = CType(dgrStudyFormulations.DataKeys(e.NewEditIndex)("FormulationLotNo"), String) 

它设置在HTML

Property SelectedFormulationLotNo() As String 
    Get 
     Return hidSelectedFormulationLotNo.Value.Trim() 
    End Get 
    Set(value As String) 
     If String.IsNullOrEmpty(value) Then 
      hidSelectedFormulationLotNo.Value = String.Empty 
     Else 
      hidSelectedFormulationLotNo.Value = value.Trim() 
     End If 
    End Set 
End Property 

然后jQuery函数调用设置隐藏字段网格中新近编辑的行中的正确选项。

+0

在JS中没有设置它将值限制为整个网格的一个值?我需要它是编辑时的旧值。 – Lonefish

+0

Nvm,发现点击行上的编辑时会发生这种情况。 – Lonefish

+0

我使用了hiddenfield,但是复制了“RowDataBound”事件中的值,因为Javascript出现了一些奇怪的错误,而且我更喜欢更多的代码隐藏。谢谢! – Lonefish

1

如何我终于做到了(但留下Rake36的答案的答案,因为它可能工作太让我得到我所需要的方向)因为我无法得到的Javascript功能来出于某种原因,我弄乱知道围绕我能得到唱片公司的价值“的RowDataBound”我相结合的Rake36与隐藏字段的方法,并在代码隐藏(中的RowDataBound)

在代码隐藏设置的值:

protected void gvwUsers_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     DropDownList DropDownListRol = (DropDownList)e.Row.FindControl("ddlRolOmschrijving"); 
     if (e.Row.RowType == DataControlRowType.DataRow && DropDownListRol != null) 
     { 
      DsFenVlaanderen.tb_rolDataTable dtRole = DsFenVlaanderen.RolTableAdapter.GetData(); 
      //Fill Dropdownlist 
      DropDownListRol.DataSource = dtRole; 
      DropDownListRol.DataValueField = dtRole.Rol_IDColumn.ColumnName; 
      DropDownListRol.DataTextField = dtRole.Rol_omschrijvingColumn.ColumnName; 
      DropDownListRol.DataBind(); 
      //Set Selected value 
      DropDownListRol.Items.FindByValue(hidSelectedRole.Value).Selected = true; 
     } 
    } 

    protected void gvwUsers_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     //Set hiddenfield to value of Rol_ID 
     hidSelectedRole.Value = gvwUsers.DataKeys[e.NewEditIndex].Values["Rol_ID"].ToString(); 

    } 

这是我的网格:

<asp:hiddenfield runat="server" id="hidSelectedRole" value="-1" /> 
    <fen:FenGridViewSelectable ID="gvwUsers" runat="server" Selectable="False" 
     DataSourceID="dsUsers" EnableModelValidation="True" SkinID="Blue" 
     AllowSorting="True" OnDataBound="gvwUsers_DataBound" OnRowDeleting="gvwUsers_RowDeleting" 
     AutoGenerateColumns="False" DataKeyNames="User_ID,Rol_ID" OnRowDataBound="gvwUsers_RowDataBound" OnRowEditing="gvwUsers_RowEditing" OnRowUpdating="gvwUsers_RowUpdating"> 
     <Columns> 
      <asp:BoundField DataField="User_ID" HeaderText="Gebruikersnaam" ReadOnly="True" SortExpression="User_ID" /> 
      <asp:BoundField DataField="User_ID_EXT" HeaderText="Naam" ReadOnly="true" SortExpression="User_ID_EXT" /> 
      <%-- <asp:BoundField DataField="Rol_omschrijving" HeaderText="Type bestuurder" SortExpression="Rol_omschrijving" /> --%> 
      <asp:TemplateField HeaderText="Type bestuurder" SortExpression="Rol_omschrijving"> 
       <ItemTemplate> 
        <asp:Label ID="lblRolOmschrijving" Text='<%# Eval("Rol_omschrijving") %>' runat="server"/> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:DropDownList ID="ddlRolOmschrijving" runat="server" DataField="Rol_omschrijving"></asp:DropDownList> 
       </EditItemTemplate> 
      </asp:TemplateField> 
      <fen:FenTemplateField HeaderStyle-Width="100px"> 
       <ItemTemplate> 
        <fen:FenButton ID="btnEdit" runat="server" Function="Edit" /> 
        <fen:FenButton ID="btnDelete" runat="server" Function="Delete" /> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <fen:FenButton ID="btnUpdate" runat="server" Function="Update" /> 
        <fen:FenButton ID="btnCancel" runat="server" Function="CancelInline" /> 
       </EditItemTemplate> 
      </fen:FenTemplateField> 
     </Columns> 
    </fen:FenGridViewSelectable> 
    <asp:ObjectDataSource ID="dsUsers" runat="server" 
     OldValuesParameterFormatString="original_{0}" SelectMethod="GetData" 
     TypeName="FenVlaanderen.DsFenVlaanderenTableAdapters.vUsersTableAdapter"></asp:ObjectDataSource> 

    <asp:Label ID="lblNoResults" runat="server" Visible="false" CssClass="error">Er werden geen gebruikers gevonden.</asp:Label> 
    <asp:Label ID="lblDeleteNotAllowed" runat="server" Visible="false" CssClass="error" /> 

    <fen:AddUser ID="addUser" runat="server" OnFenControlSaved="addUser_FenControlSaved" /> 
</ContentTemplate>