Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GridView显示文本而不是外键_C#_Asp.net_Linq_Gridview - Fatal编程技术网

C# GridView显示文本而不是外键

C# GridView显示文本而不是外键,c#,asp.net,linq,gridview,C#,Asp.net,Linq,Gridview,我刚刚开始学习如何使用Gridview控件显示SQL数据。除了显示从查找表填充的一个数据字段的更为用户友好的信息外,我几乎可以使所有内容正常工作。页面的整个概念我也希望能够更新、插入和删除新记录,由于某些原因,我在使用SqlDataSource时无法使用这些选项,所以我使用LinqDataSource,现在一切都正常(除了我还没有弄清楚插入…另一个问题) 我还使用VisualStudio中的控件选项卡来选择和编辑控件的属性,这样就可以使用向导,而不是手工编写示例 我搞不懂的是如何使用employ

我刚刚开始学习如何使用Gridview控件显示SQL数据。除了显示从查找表填充的一个数据字段的更为用户友好的信息外,我几乎可以使所有内容正常工作。页面的整个概念我也希望能够更新、插入和删除新记录,由于某些原因,我在使用SqlDataSource时无法使用这些选项,所以我使用LinqDataSource,现在一切都正常(除了我还没有弄清楚插入…另一个问题)

我还使用VisualStudio中的控件选项卡来选择和编辑控件的属性,这样就可以使用向导,而不是手工编写示例

我搞不懂的是如何使用employeetypeid(其中包含employeetypelookup表中的外键)使我的列为用户显示employeetype文本值,这样做更有意义。我发现了一个“演练:在GridView Web服务器控件中编辑时显示下拉列表”,这非常有效。当我进入编辑模式时,下拉列表显示employeetype文本,当我选择其他类型时,相应的employeetype id存储在数据库中

那么,我如何修改某些内容(数据源???)以在DataGrid中显示employeetype文本呢

            <asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="SNRmain.SNRmainDataContext" EntityTypeName="" OrderBy="lastname, preferredfirstname" Select="new (personnelid, lastfirstname)" TableName="masterpersonnellastpreferreds"></asp:LinqDataSource>
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="LinqDataSource1" DataTextField="lastfirstname" DataValueField="personnelid">
    </asp:DropDownList>
    <asp:LinqDataSource ID="LinqDataSource2" runat="server" ContextTypeName="SNRmain.SNRmainDataContext" EnableDelete="True" EnableInsert="True" EnableUpdate="True" EntityTypeName="" TableName="tblappointmentdates" Where="personnelid == @personnelid" OrderBy="startdate desc">
        <WhereParameters>
            <asp:ControlParameter ControlID="DropDownList1" Name="personnelid" PropertyName="SelectedValue" Type="Int32" />
        </WhereParameters>
    </asp:LinqDataSource>

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="snrappointmentid" DataSourceID="LinqDataSource2">
        <Columns>
            <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
            <asp:BoundField DataField="startdate" HeaderText="startdate" SortExpression="startdate" />
            <asp:BoundField DataField="endingdate" HeaderText="endingdate" SortExpression="endingdate" />
            <asp:TemplateField HeaderText="employeetypeid" SortExpression="employeetypeid">
                <EditItemTemplate>
                    <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="LinqDataSource3" DataTextField="employeetypetext" DataValueField="employeetypeid" SelectedValue='<%# Bind("employeetypeid", "{0}") %>'>
                    </asp:DropDownList>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("employeetypeid") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="apptcomment" HeaderText="apptcomment" SortExpression="apptcomment" />
            <asp:BoundField DataField="dateentered" HeaderText="dateentered" SortExpression="dateentered" />
        </Columns>
    </asp:GridView>
    <asp:LinqDataSource ID="LinqDataSource3" runat="server" ContextTypeName="SNRmain.SNRmainDataContext" EntityTypeName="" OrderBy="employeetypetext" Select="new (employeetypeid, employeetypetext)" TableName="tblemployeetypelookups">
    </asp:LinqDataSource>

我试图修改LinqDataSource2,使其包含如下语句,但该语句不起作用,并且出现了一个对我来说毫无意义的错误。“System.Web.Query.Dynameic.ParseException:语法错误

    <asp:LinqDataSource ID="LinqDataSource2" runat="server" ContextTypeName="SNRmain.SNRmainDataContext" EntityTypeName="" Select="snrappointmentid, 
    personnelid, startdate, 
    endingdate, employeetypeid, 
    tblemployeetypelookup.employeetypetext 
    from tblappointmentdates 
    join tblemployeetypelookups on tblappointmentdates.employeetypeid = tblemployeetypelookups.employeetypeid" TableName="tblappointmentdates" Where="personnelid == @personnelid">
        <WhereParameters>
            <asp:ControlParameter ControlID="DropDownList1" Name="personnelid" PropertyName="SelectedValue" Type="Int32" />
        </WhereParameters>
    </asp:LinqDataSource>


提前感谢。

好的,如果我理解正确,您应该做的是在函数中传递
employeetypeid
,检索文本并像这样绑定到控件

 <asp:Label ID="Label1" runat="server" Text='<%# Bind("employeetypeid") %>'></asp:Label>

另外,作为旁注,我注意到您使用Label1命名,这是一种非常糟糕的做法。

为什么要绑定
employeetypeid?当用户选择编辑行employeetypeid时,需要将其输入数据库以进行更新。在使用控件时,我可能没有正确选择此选项。但当我这样做时实际使用编辑功能dropdownlist实际显示文本,并在选择更新时将正确的id放入数据库。这是向导添加的代码。它似乎正在工作,因此我没有修改它。只有当用户未处于编辑模式时,我仍然希望看到生成的文本。感谢到目前为止很有帮助。我添加了您提供的GetEmployeeName中包含的代码。并开发了获取类型文本的函数(您称其为“名称”)。我遇到的第一个问题是主文件不喜欢函数的“Private”,所以我将其改为“Protected”“看起来至少是这样。现在我在GetEmployeeName中得到了一个无效参数的错误。编译器错误消息:CS1502:aboutus\u who\u people\u update\u master\u appointment\u gridview.GetEmployeeName(int)”的最佳重载方法匹配有一些无效参数
<asp:Label ID="Label1" runat="server" Text='<% #GetEmployeeName(Eval("employeetypeid"))%>' runat="server" />
protected string GetEmployeeName(int employeetypeid)
{
           //What ever is the way to query and return from here
}