ASP.Net - DropDownList, используемый в EditItemTemplate в DetailsView

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

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

Но, как я уже писал, свойство SelectedValue не разрешено в дизайнере. Я ищу другой способ SelectedValue = '‹% # Bind (" PermissionID ")%>', потому что я хочу использовать свойство DropDownList SelectedValue в качестве параметра для метода обновления 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>

Таблицы БД:

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

  • USER_ID - целое
  • PERMISSION_ID - int
  • USER_NAME_A - nvarchar (20)

Разрешения

  • PERMISSION_ID - int
  • PERMISSION_NAME_A - nvarchar (20)

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


person Jenda Matejicek    schedule 02.09.2013    source источник
comment
не могли бы вы подробнее рассказать о своем вопросе, чтобы другие могли помочь вам лучше. Что на самом деле вы пытаетесь сделать.   -  person Harish Bhatt    schedule 02.09.2013
comment
@HarishBhatt Я попытался уточнить. Английский - не лучший мой навык :)   -  person Jenda Matejicek    schedule 02.09.2013
comment
Я опубликовал свой ответ в соответствии с моим пониманием ниже, дайте мне знать, работает ли он для вас.   -  person Harish Bhatt    schedule 02.09.2013
comment
вам нужно получить ссылку на DropdownList, чтобы выбрать значение с помощью метода ниже, для этого вы можете использовать приведенный ниже код: DropdownList ddList = (DropdownList)DetailsView2.Rows[i].FindControl("ddlEditPermissions"); теперь вы можете использовать объект DropdownList, чтобы выбрать, чтобы отменить выбор значения, используя метод ниже.   -  person Harish Bhatt    schedule 02.09.2013
comment
@HarishBhatt Спасибо за ваше время ... Я постараюсь быть более конкретным. Я хочу использовать это свойство DropDownList SelectedValue в качестве параметра для метода обновления ObjectDataSource.   -  person Jenda Matejicek    schedule 02.09.2013
comment
Я бы посоветовал прочитать это: Учебное пособие: управление источниками данных сущностей. Вы найдете реализацию здесь.   -  person afzalulh    schedule 02.09.2013
comment
Я думаю, вам нужно манипулировать им в onDataBound событии DetailsView   -  person Harish Bhatt    schedule 03.09.2013


Ответы (2)


Вот как вы можете выбрать значения 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
}

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

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

or

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

вы можете использовать методы FindByValue или FindByText для поиска значений из раскрывающегося списка, как показано ниже:

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
}
person Harish Bhatt    schedule 02.09.2013

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

Я добавляю ключ в ключи в событии ItemUpdating в DetailView.

protected void dtlvUserDetail_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
        {
            DropDownList ddlEditPermissions= (DropDownList)dtlvUzivatel.FindControl("ddlEditPermissions");
            e.Keys["permission"] = ddlEditPermissions.SelectedValue;                
        }
person Jenda Matejicek    schedule 03.09.2013
comment
Для SelectedValue = '‹% # Bind (PermissionID)%›' вы вызывали DataBind () для DropDownList? - person Emad Mokhtar; 03.09.2013
comment
Проблема с SelectedValue='<%# Bind("PermissionID") %>'. Он недоступен в коде дизайна страницы как свойство DropDownList, и я действительно не знаю почему. Поэтому мне пришлось искать другой способ. И это так просто. - person Jenda Matejicek; 04.09.2013