2016-08-01 39 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>