Как заполнить ASP.NET DropDownList из одного источника данных и установить выбранное значение из другого? - PullRequest
0 голосов
/ 08 декабря 2011

Я ищу пример того, как заполнить раскрывающийся список из одного источника данных SQL и установить выбранное поле из другого, в основном это то же самое, что здесь задается http://forums.asp.net/p/793752/793955.aspx есть ответ далее (http://forums.asp.net/post/793978.aspx), который должен работать, но когда я копирую и вставляю код, он вызывает много ошибок. Я ищу пример ASP.NET 2, который написан на C #.

Ответ, похоже, говорит о том, что можно обойтись без написания какого-либо кода, это правильно?

В конечном итоге я хочу использовать это как часть гораздо более сложной формы, в которой неопределенное количество подобных выпадающих списков динамически создается внутри элемента управления повторителя.

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Проблема в том, что в примере было несколько опечаток из-за преобразования в HTML.Вот копия этой страницы, которая должна работать правильно:

<%@  page="" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default_aspx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:FormView DataKeyNames="CustomerID" DataSourceID="SqlDataSource1" ID="FormView1"
            runat="server">
            <EditItemTemplate>
                CustomerID:
                <asp:Label ID="CustomerIDLabel1" runat="server" Text="<%# Eval("CustomerID") %>"
                    gt="" br="">CompanyName:
                    <asp:TextBox ID="CompanyNameTextBox" runat="server" Text="<%# Bind("CompanyName") %>"></asp:TextBox><br />
                    ContactName:
                    <asp:TextBox ID="ContactNameTextBox" runat="server" Text="<%# Bind("ContactName") %>"></asp:TextBox><br />
                    ContactTitle:
                    <asp:DropDownList ID="DropDownList1" runat="server" DataValueField="ContactTitle"
                        DataTextField="ContactTitle" DataSourceID="SqlDataSource1" SelectedValue="<%# Bind("ContactTitle") %>">
                    </asp:DropDownList>
                    <asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="SELECT DISTINCT [ContactTitle] FROM [Customers]"
                        ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"></asp:SqlDataSource>
                    <br />
                    <asp:LinkButton ID="UpdateButton" runat="server" Text="Update" CommandName="Update"
                        CausesValidation="True"></asp:LinkButton>&nbsp;<asp:LinkButton ID="UpdateCancelButton"
                            runat="server" Text="Cancel" CommandName="Cancel" CausesValidation="False"></asp:LinkButton>
                </asp:Label></EditItemTemplate>
            <ItemTemplate>
                CustomerID:
                <asp:Label ID="CustomerIDLabel" runat="server" Text="<%# Eval("CustomerID") %>"></asp:Label><br />
                CompanyName:
                <asp:Label ID="CompanyNameLabel" runat="server" Text="<%# Bind("CompanyName") %>"></asp:Label><br />
                ContactName:
                <asp:Label ID="ContactNameLabel" runat="server" Text="<%# Bind("ContactName") %>"></asp:Label><br />
                ContactTitle:
                <asp:Label ID="ContactTitleLabel" runat="server" Text="<%# Bind("ContactTitle") %>"></asp:Label><br />
                <asp:Button ID="EditButton" runat="server" Text="Edit" CommandName="Edit"></asp:Button></ItemTemplate>
            <asp:sqldatasource id="SqlDataSource1" runat="server" selectcommand="SELECT [CustomerID], [CompanyName], [ContactName], [ContactTitle] FROM [Customers]"
                connectionstring="<%$ ConnectionStrings:NorthwindConnectionString %>" updatecommand="UPDATE [Customers] SET [CompanyName] = @CompanyName, [ContactName] = @ContactName, [ContactTitle] = @ContactTitle WHERE [CustomerID] = @original_CustomerID">
            </asp:sqldatasource>
            <div>
            </div>
        </asp:FormView>
    </div>
    </form>
</body>
</html>
0 голосов
/ 29 декабря 2011

Мне удалось исправить пример так, чтобы он компилировался, и он действительно демонстрирует, как заполнять данные из одного источника данных и устанавливать выбранное значение из другого. Рабочий код приведен ниже, но сначала вот некоторые вещи, которые меня поразили, которые могут помочь другим новичкам:

  • Eval используется, когда вы хотите только прочитать значение, используйте bind, если вам нужно прочитать и обновить его.
  • Если вы устанавливаете свойство text объекта с помощью Bind или Eval, внешние и внутренние кавычки должны быть разными стилями, это должны быть одинарные кавычки, а другие - двойные кавычки, но не важно, какие именно. 1006 *
  • Если вы копируете и вставляете пример, вам нужно изменить директиву Inherits в первой строке.

Вот рабочий код:

<%@  Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="WebApplication6._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
  <title>Untitled Page</title>
</head>
<body>
  <form id="form1" runat="server">
  <div>
    <asp:SqlDataSource id="SqlDataSource1" runat="server" selectcommand="SELECT [CustomerID], [CompanyName], [ContactName], [ContactTitle] FROM [Customers]"
        connectionstring="<%$ ConnectionStrings:NorthwindConnectionString %>" updatecommand="UPDATE [Customers] SET [CompanyName] = @CompanyName, [ContactName] = @ContactName, [ContactTitle] = @ContactTitle WHERE [CustomerID] = @CustomerID">
    </asp:sqldatasource>
    <asp:FormView DataKeyNames="CustomerID" DataSourceID="SqlDataSource1" ID="FormView1" runat="server">
      <EditItemTemplate>
        CustomerID:
        <asp:Label ID="CustomerIDLabel" runat="server" Text="<%# Bind('CompanyName') %>"></asp:Label><br />
        CompanyName:
        <asp:TextBox ID="CompanyNameTextBox" runat="server" Text="<%# Bind('CompanyName') %>"></asp:TextBox><br />
        ContactName:
        <asp:TextBox ID="ContactNameTextBox" runat="server" Text="<%# Bind('ContactName') %>"></asp:TextBox><br />
        ContactTitle:
        <asp:DropDownList ID="DropDownList1" runat="server" DataValueField="ContactTitle" DataTextField="ContactTitle"
                            DataSourceID="SqlDataSource2" SelectedValue="<%# Bind('ContactTitle') %>"></asp:DropDownList>
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" SelectCommand="SELECT DISTINCT [ContactTitle] FROM [Customers]"
                            ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"></asp:SqlDataSource><br />
        <asp:LinkButton ID="UpdateButton" runat="server" Text="Update" CommandName="Update" CausesValidation="True"></asp:LinkButton>
        <asp:LinkButton ID="UpdateCancelButton" runat="server" Text="Cancel" CommandName="Cancel" CausesValidation="False"></asp:LinkButton>
      </EditItemTemplate>
      <ItemTemplate>
        CustomerID:
        <asp:Label ID="CustomerIDLabel" runat="server" Text='<%# Eval("CustomerID") %>'></asp:Label><br />
        CompanyName:
        <asp:Label ID="CompanyNameLabel" runat="server" Text="<%# Bind('CompanyName') %>"></asp:Label><br />
        ContactName:
        <asp:Label ID="ContactNameLabel" runat="server" Text="<%# Bind('ContactName') %>"></asp:Label><br />
        ContactTitle:
        <asp:Label ID="ContactTitleLabel" runat="server" Text="<%# Bind('ContactTitle') %>"></asp:Label><br />
        <asp:Button ID="EditButton" runat="server" Text="Edit" CommandName="Edit"></asp:Button>
        <div>
        </div>
      </ItemTemplate>
    </asp:FormView>
  </div>
  </form>
</body>
</html>
...