ASP.Net - 在DetailsView的EditItemTemplate中使用的DropDownList

时间:2013-09-02 10:36:03

标签: asp.net detailsview edititemtemplate

我遇到 DetailsView 的问题。我需要在数据库中使用 DropDownList 来获取更新值。我在不同的表中得到了这些值。我使用ObjectDataSource,它可以正常工作。我的问题是当我无法在设计器中绑定 SelectedValue 时如何使用DropDownList,因为它丢失了。我找到了很多像

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

但是我在设计器中不允许使用SelectedValue属性。我正在寻找 SelectedValue ='&lt;%#Bind(“PermissionID”)%&gt;'的另一种方式,因为我想使用DropDownList SelectedValue属性作为ObjectDataSource UpdateMethod的参数。

我的更新方法:

    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 - int
  • PERMISSION_ID - int
  • USER_NAME_A - nvarchar(20)

权限

  • PERMISSION_ID - int
  • PERMISSION_NAME_A - nvarchar(20)

我正在使用VS2012 .Net Framework 4.5 ... 那么有人可以帮助我吗?

2 个答案:

答案 0 :(得分: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
}

假设你想从下拉列表中选择“印度”,那么它将是:

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

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

您可以使用FindByValueFindByText方法从DropdownList中查找值,如下所示:

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
}

答案 1 :(得分:0)

解决了......真的很简单。谢谢你的时间;)

我将密钥添加到DetailView中的ItemUpdating事件中的键中。

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