2013-09-02 3 views
0

У меня проблема с DetailsView. Мне нужно использовать DropDownList для значений обновлений в databaze. Эти значения у меня есть в другой таблице. Я использую ObjectDataSource и работает правильно. Моя проблема заключается в том, как использовать DropDownList, когда я не могу связать SelectedValue в дизайнере, потому что он отсутствует. Я нашел много советов, таких какASP.Net - DropDownList используется в EditItemTemplate в DetailsView

<asp:DropDownList ID="ddlEditPermissions" runat="server" DataSource='<%#getPermissions() %>' SelectedValue='<%# Bind("PermissionID") %>'/> 

Но, как я писал, свойство SelectedValue не допускается в дизайнере. Я ищу другой способ: SelectedValue = '<% # Bind ("PermissionID")%>', потому что я хочу использовать свойство DropDownList SelectedValue в качестве параметра для метода UpdateDeadSource ObjectDataSource.

Мой метод обновления:

public static void UpdateUser(int UserId, string UserName, int PermissionID) 
    { 
     using (DC_databazeDataContext db = new DC_databazeDataContext()) 
     { 
      if (!db.DatabaseExists()) 
       throw new Exception("Databáze neexistuje nebo se k ní nedá připojit!"); 

      var users = db.USERs.Where(u => u.USER_ID == UserId); 

      if (users.Count() == 0) return; 

      USER aktU = users.First(); 

      aktU.USER_NAME_A = UserName; 
      aktU.OPRAVNENI_ID = PermissionID; 

      db.SubmitChanges(); 
     } 
    } 

Вот мой DetailsVeiw:

<asp:DetailsView ID="DetailsView2" runat="server" AutoGenerateRows="False" DataSourceID="ODS_UzivatelDetail" DataKeyNames="UserId"> 
    <Fields> 
     <asp:BoundField DataField="UserId" HeaderText="UserId" SortExpression="UserId" ReadOnly="true" /> 
     <asp:BoundField DataField="UserName" HeaderText="UserName" SortExpression="UserName" /> 
     <asp:TemplateField HeaderText="PermissionID" SortExpression="PermissionID"> 
      <EditItemTemplate> 
       <asp:DropDownList ID="ddlEditPermissions" runat="server" DataSource='<%# getPermissions() %>'/> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="lPermissions" runat="server" Text='<%# Bind("PermissionID") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:CommandField ShowEditButton="True" /> 
    </Fields> 
</asp:DetailsView> 

DB таблицы:

Пользователи

  • USER_ID - INT
  • PERMISSION_ID - INT
  • USER_NAME_A - NVARCHAR (20)

Права доступа

  • PERMISSION_ID - INT
  • PERMISSION_NAME_ A - NVARCHAR (20)

Я использую VS2012 .Net Framework 4.5 ... Так может кто-нибудь мне помочь?

+0

не могли бы вы подробнее рассказать о своем вопросе, чтобы другие могли помочь вам лучше. Что на самом деле вы пытаетесь сделать. –

+0

@HarishBhatt Я старался быть более конкретным. Английский не самый лучший навык :) –

+0

Я отправил свой ответ в соответствии с моим пониманием ниже, дайте мне знать, он работает на вас. –

ответ

0

Решено ... Это было действительно просто.Спасибо за ваше время;)

Я добавляю ключ в ключи в ItemUpdating event в DetailView.

protected void dtlvUserDetail_ItemUpdating(object sender, DetailsViewUpdateEventArgs e) 
     { 
      DropDownList ddlEditPermissions= (DropDownList)dtlvUzivatel.FindControl("ddlEditPermissions"); 
      e.Keys["permission"] = ddlEditPermissions.SelectedValue;     
     } 
+0

Для SelectedValue = '<% # Bind ("PermissionID")%>' вы вызвали DataBind() для DropDownList? –

+0

Возникла проблема с 'SelectedValue = '<% # Bind (" PermissionID ")%>''. Он не доступен в коде дизайна страницы в качестве свойства DropDownList, и я действительно не знаю, почему. Поэтому мне пришлось найти другой способ. И это так просто. –

0

Это, как вы можете выбрать DROPDOWNLIST значения:

if (ddlList.Items.FindByValue(<string type value you want to select from dropdownlist>) != null) 
{ 
cboRegion.SelectedValue = ""; //Value you want to select if you are using Value attribute to select 
} 

Предположим, что вы хотите выбрать vaulue "Индия" из выпадающего списка, то это будет:

if (ddlList.Items.FindByValue("India") != null) 
{ 
cboRegion.SelectedValue = "India"; 
} 

или

string strValue = ddlList.Items.FindByValue("India").ToString(); 
if (strValue != null) 
{ 
cboRegion.SelectedValue = strValue ; 
} 

Вы можете использовать FindByValue или FindByText методы для поиска значений из DropdownList as ниже:

if (ddlList.Items.FindByText(<string type value you want to select from dropdownlist>) != null) 
{ 
cboRegion.SelectedText = ""; //Value you want to select if you are using Value attribute to select 
} 
Смежные вопросы