2015-11-06 3 views
0

Я новичок в asp.net, и мне нужна помощь, пожалуйста. Я использую C# и sql.Как связать dropdownlist в подробном представлении с другой таблицей

Что я хочу сделать следующее: У меня есть подробный вид, где я могу использовать его для добавления сотрудников и сохранения его в моей базе данных в таблице Employee. В представлении деталей I'v создал поле шаблона для dept_id (это поле является внешним ключом). Я хочу сделать это как раскрывающийся список, в котором вы можете выбрать название отдела (которое находится в таблице Департамента) вместо ввода идентификатора отдела. Я очень придерживаюсь этого. Любая помощь будет оценена.

Это .aspx

<asp:DetailsView ID="DetailsView2" runat="server" AutoGenerateRows="False" 
       CellPadding="4" DataKeyNames="Emp_Id" DataSourceID="SqlDataSource3" 
       DefaultMode="Insert" ForeColor="#333333" GridLines="None" Height="50px" 
       Width="149px"> 
       <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
       <CommandRowStyle BackColor="#E2DED6" Font-Bold="True" /> 
       <EditRowStyle BackColor="#999999" /> 
       <FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True" /> 
       <Fields> 
        <asp:BoundField DataField="Emp_Id" HeaderText="Emp_Id" InsertVisible="False" 
         ReadOnly="True" SortExpression="Emp_Id" /> 
        <asp:BoundField DataField="FirstName" HeaderText="FirstName" 
         SortExpression="FirstName" /> 
        <asp:BoundField DataField="LastName" HeaderText="LastName" 
         SortExpression="LastName" /> 
        <asp:BoundField DataField="EndUser" HeaderText="EndUser" 
         SortExpression="EndUser" /> 



        <asp:TemplateField HeaderText="Dept_id" SortExpression="Dept_id"> 
         <EditItemTemplate> 
          <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="ddlSqlDataSource" 
          DataTextField="dept_name" DataValueField="dept_id" SelectedValue='<%# Bind("dept_id") %>'> 
          </asp:DropDownList> 
         </EditItemTemplate> 


         <InsertItemTemplate> 
          <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="ddlSqlDataSource" 
          DataTextField="dept_name" DataValueField="dept_id" SelectedValue='<%# Bind("dept_id") %>'> 
          </asp:DropDownList> 
         </InsertItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="Label5" runat="server" Text='<%# Bind("Dept_id") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 



        <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" /> 
        <asp:BoundField DataField="title" HeaderText="title" SortExpression="title" /> 




        <asp:TemplateField HeaderText="JoinDate" SortExpression="JoinDate"> 
         <EditItemTemplate> 
          <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("JoinDate") %>' TextMode="Date"></asp:TextBox> 
         </EditItemTemplate> 
         <InsertItemTemplate> 
          <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("JoinDate") %>' TextMode="Date"></asp:TextBox> 
         </InsertItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="Label2" runat="server" Text='<%# Bind("JoinDate") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:CommandField ButtonType="Button" ShowInsertButton="True" /> 

       </Fields> 
       <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
       <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
       <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
       <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
      </asp:DetailsView> 

Я не знаю, что я должен добавить в точности (ddlSqlDataSource)

<asp:SqlDataSource ID="ddlSqlDataSource" runat="server" 
       ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
       SelectCommand="SELECT [dept_name] FROM [Department]"> 
      </asp:SqlDataSource> 
+0

Чтобы сделать это легче на себя, просто перейдите в поле зрения дизайна вашей страницы, и выделить/нажмите один элемент управления, который вы пытаетесь добавить источник данных ... когда вы это сделаете, в правом верхнем углу появится небольшая стрелка, которая откроет меню, которое поможет сделать это за вас , –

+0

Во-первых, спасибо за ваш ответ. Ну, в нормальных ситуациях я делаю это так, но элемент управления, который я пытаюсь добавить источник данных для (dropdownlist), находится внутри представления деталей, и его нельзя щелкнуть. Только просмотр сведений можно щелкнуть @Gavin –

ответ

0

Я решил проблему

.aspx

<asp:TemplateField HeaderText="Dept_id" SortExpression="Dept_id"> 
         <ItemTemplate> 
         <%#Eval("dept_id") %> 
         </ItemTemplate> 

         <InsertItemTemplate> 
          <asp:DropDownList ID="ddlDept" runat="server" DataSourceID="ddlSqlDataSource" 
          DataTextField="dept_name" DataValueField="dept_id" SelectedValue='<%# Bind("Dept_id") %>'> 
          </asp:DropDownList> 
          <asp:SqlDataSource ID="ddlSqlDataSource" runat="server" 
       ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 

       SelectCommand="SELECT dept_id, dept_name FROM Department "> 

      </asp:SqlDataSource> 
         </InsertItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="Label5" runat="server" Text='<%# Bind("Dept_id") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 

Код позади:

protected void DetailsView2_DataBound(object sender, EventArgs e) 
    { 
     DropDownList ddlDept = (DropDownList)DetailsView2.FindControl("ddlDept"); 

     ddlDept.Items.Insert(0, new ListItem("Select department")); 

    } 
0

Я решил свою подобную проблему в DataBound обработчика в коде позади:

protected void OrgsDetailView1_DataBound(object sender, EventArgs e) 
{ 
    if (OrgsDetailsView1.CurrentMode == DetailsViewMode.Edit) 
    { 
     var drpCategory = OrgsDetailsView1.FindControl("drpCategory") as DropDownList; 
     if (drpCategory != null) 
     { 
      //drops to here when in edit mode and dropdownList is available. 
      //next 3 lines just get the dataTable (catsdt) 
      var cats = new Categories(); //class that gets dataTable 
      var prm = new ParmsClass(); //parameter for stored procedure 
      var catsdt = cats.GetAll(prm); //gets the dataTable 

      // load the dropdownlist 
      drpCategory.DataSource = catsdt; 
      drpCategory.DataTextField = "name"; 
      drpCategory.DataValueField = "Id"; 
      drpCategory.DataBind(); 
     } 
Смежные вопросы