2009-07-07 8 views
2

У меня есть вопрос:Получить значение из базы данных relationed

У меня есть две таблицы MSSQL, элементы и состояния, которые связаны друг с другом через stateid:

STATES     ITEMS 
------------- --------------------------- 
| id | name | | id | name | ... | stateid 
    V         ^
    |_____________________________________| 

Так Items.StateID связан с государством .Я БЫ. В моей текущей ситуации у меня есть GridView, который привязывается к LinqDataSource, который ссылается на таблицу Items. GridView имеет два столбца, один - Name, а другой - StateID. Я хочу, чтобы вытащить имя состояния, связанного с идентификатором состояния, из таблицы состояний, чтобы оно отображалось вместо идентификатора состояния.

Заранее благодарен!

EDIT

Вот сетка/DataSource:

<asp:LinqDataSource ID="ItemViewDataSource" runat="server" ContextTypeName="GSFyi.GSFyiDataClassesDataContext" EnableDelete="true" TableName="FYI_Items" /> 

<h2 class="gridTitle">All Items</h2> 
<telerik:RadGrid ID="ItemViewRadGrid" runat="server" AutoGenerateColumns="False" DataSourceID="ItemViewDataSource" GridLines="None" AllowAutomaticDeletes="True" EnableEmbeddedSkins="False" OnItemDataBound="itemsGrid_ItemDataBound"> 
<HeaderContextMenu> 
    <CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation> 
</HeaderContextMenu> 
<MasterTableView DataKeyNames="id" DataSourceID="ItemViewDataSource" CommandItemDisplay="None" CssClass="listItems" Width="98%"> 
    <RowIndicatorColumn> 
     <HeaderStyle Width="20px" /> 
    </RowIndicatorColumn> 
    <ExpandCollapseColumn> 
     <HeaderStyle Width="20px" /> 
    </ExpandCollapseColumn> 
    <Columns> 
     <telerik:GridTemplateColumn ItemStyle-CssClass="gridActions edit" UniqueName="Edit"> 
      <ItemTemplate> 
       <asp:HyperLink ID="edit" runat="server" Text="Edit"></asp:HyperLink> 
      </ItemTemplate> 
<ItemStyle CssClass="gridActions edit"></ItemStyle> 
     </telerik:GridTemplateColumn> 
     <telerik:GridButtonColumn ConfirmText="Are you sure you want to delete this item?" ConfirmDialogType="RadWindow" ButtonType="LinkButton" ItemStyle-CssClass="gridActions delete" CommandName="Delete" > 
<ItemStyle CssClass="gridActions delete"></ItemStyle> 
     </telerik:GridButtonColumn> 
     <telerik:GridBoundColumn DataField="name" HeaderText="Item Name" SortExpression="name" 
      UniqueName="name"> 
     </telerik:GridBoundColumn> 
        <telerik:GridTemplateColumn HeaderText="State" UniqueName="state"> 
         <ItemTemplate> 
          <asp:Label ID="stateLbl" runat="server" Text='<%# Eval("stateid") %>' /> 
         </ItemTemplate> 
        </telerik:GridTemplateColumn> 
    </Columns> 
</telerik:RadGrid> 

И текущий код-за:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using Telerik.Cms.Web.UI; 
using Telerik.Web.UI; 

public partial class Custom_Modules_GSFyi_Backend_Views_ItemsListView : ViewModeUserControl<ItemsView> 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     addNewItem.NavigateUrl = CreateHostViewCommand("ItemsInsertView",null,null); 
    } 
    protected void itemsGrid_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e) 
    { 
     if (e.Item.ItemType == GridItemType.Item || e.Item.ItemType == GridItemType.AlternatingItem) 
     { 
      var item = (GSFyi.FYI_Item)e.Item.DataItem; 
      HyperLink edit = (HyperLink)e.Item.FindControl("edit"); 
      edit.NavigateUrl = CreateHostViewCommand("ItemsEditView", item.id.ToString(), null); 

     } 
    } 
} 

ли эта помощь на всех?

ответ

4

Предполагая, что вы определили отношения в классах данных LinqToSql и управления LinqDataSource указывает на ваши детали сущностей вы должны быть в состоянии использовать следующий синтаксис Databinding непосредственно в GridView разметки :

<asp:GridView ID="ItemsGridView" runat="server" DataKeyNames="id" DataSourceID="ItemsLinqDataSource"> 
    <Columns> 
     <asp:TemplateField> 
        <ItemTemplate> 
          <%# Eval("states.name") %> 
        </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

<asp:LinqDataSource ID="ItemsLinqDataSource" runat="server" ContextTypeName="DataClassesDataContext" TableName="items"></asp:LinqDataSource> 
+0

Можете ли вы рассказать о первой части своего сообщения? Я не уверен, что вы имеете в виду, имея точку LinqDataSource в объекте моего элемента. Спасибо! – Anders

+0

Я просто хочу сказать, что ваш LINQDataSource указывает на таблицу элементов. Я обновил свой ответ, чтобы показать пример. Код, который вы указали, выглядит так, как будто вы правильно настроили его. – joshb

+0

Хорошо, спасибо. Я понял :) – Anders

1

попробовать что-то вроде этого:

var query = from s in States 
      join i in Items on s.ID equals i.StateID 
      select i.Name; 

LINQ к провайдеру SQL будет принимать этот запрос и преобразовать его в SQL запрос, который будет выглядеть примерно так:

select i.Name 
from Items i 
    inner join States s on i.StateID = s.ID; 

Отдается Считывание: SQL INNER JOIN Keyword

+0

ОК, мне нужно сделать это в page_load, чтобы я мог указать точный запрос, а не правильно использовать LinqDataSource? – Anders

+0

Я не понимаю - можете ли вы разместить больше кода, чтобы я мог лучше помочь? –

+0

Да, вы можете изменить запрос LinqDataSource. – iburlakov

1

Попробуйте:

var query = from i in Items 
      join s in States on s.id equals i.stateid 
      select s.name, i.name 
Смежные вопросы