2017-02-21 7 views
0

У меня есть 2 таблицы, из которых я хочу получить данные. Первая таблица - таблица Подрядчика, в которой есть персональная информация подрядчиков, а вторая таблица - таблица компании, которая имеет 2 столбца, CompanyName и CompanyID. Обе таблицы имеют одинаковый столбец, CompanyID.Как я могу получить SelectedIndexChanged, чтобы получить имя компании вместо companyid в текстовое поле, две разные таблицы?

В текущем коде, который у меня есть, есть gridview с столбцом «Выбрать», SelectedIndexChanged возвращает значения из базы данных для заполнения текстовых полей.

Что я хочу сделать, это получить имя компании, а не идентификатор компании, заполненный в текстовое поле (txtCompany), как я могу изменить текущий код ниже, чтобы сделать это?

ASPX

<asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox> 
<asp:TextBox ID="txtLastName" runat="server"></asp:TextBox> 
<asp:TextBox ID="txtPID" runat="server"></asp:TextBox> 
<asp:TextBox ID="txtCompany" runat="server"></asp:TextBox> 

<asp:GridView ID="TDetails" DataSourceID="SqlDataSource1" DataKeyNames="PersonID" AutoGenerateColumns="false" runat="server" OnSelectedIndexChanged="TDetails_SelectedIndexChanged" > 
     <HeaderStyle BackColor="gray" ForeColor="White" /> 
     <Columns 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:LinkButton ID="lbtnSelect" runat="server" CommandName="Select" Text="Select" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Last Name"> 
       <ItemTemplate> 
        <asp:Label ID="lblLastName" runat="server" Text='<%#Eval("LastName") %>' /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="First Name"> 
       <ItemTemplate> 
        <asp:Label ID="lblFirstName" runat="server" Text='<%#Eval("FirstName") %>' /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Company" Visible="false"> 
       <ItemTemplate> 
        <asp:Label ID="lblCompany" runat="server" Text='<%#Eval("CompanyID") %>' /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="PersonID" Visible="false"> 
       <ItemTemplate> 
        <asp:Label ID="lblPID" runat="server" Text='<%#Eval("PersonID") %>' /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

.cs

protected void TDetails_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     txtPID.Text = TDetails.DataKeys[TwicDetails.SelectedRow.RowIndex].Value.ToString(); 
     txtLastName.Text = (TDetails.SelectedRow.FindControl("lblLastName") as Label).Text; 
     txtFirstName.Text = (TDetails.SelectedRow.FindControl("lblFirstName") as Label).Text; 
     txtCompany.Text = (TDetails.SelectedRow.FindControl("lblCompany") as Label).Text; 
     } 

ответ

1

Вы можете изменить свой SQL запрос для извлечения CompanyName так нравится, как вы выборки в CompanyId и привязать его к GridView и установить видимость false, наконец, вы можете установить значение текстового поля, как и для других элементов управления: -

SQL запросов: -

SELECT CompanyId, CompanyName, .... 
FROM tblCompany.. 

Aspx: -

<asp:TemplateField HeaderText="Company" Visible="false"> 
    <ItemTemplate> 
     <asp:Label ID="lblCompanyName" runat="server" Text='<%#Eval("CompanyName") %>' /> 
    </ItemTemplate> 
</asp:TemplateField>