【发布时间】:2020-09-30 21:45:34
【问题描述】:
我试图找出是否有一种方法可以获取名称、地址和 DSL 列中已在 STUFF() 和 XML PATH 中连接的字符串数据,并将其垂直显示在同一行中,而不是水平显示在前端。我正在使用网格视图来显示信息。
SELECT i.[InstrumentID], it.[InstrumentType],i.[InstrumentNumber], i.[NANumber],i.[DateTimeFiled],
STUFF((SELECT ', ' + n.[Surname] + n.[GivenName] + '(' + nc.[NameCode] + ')' FROM [dbo].[tblName] n
INNER JOIN [dbo].[tblNameCode] nc ON nc.[NameCodeID] = n.[NameCodeID] Where n.[InstrumentID] = i.[InstrumentID] ORDER BY n.[Surname] FOR XML PATH (''), TYPE).value('.', 'varchar(max)'), 1, 1, '') AS Name ,
STUFF(( SELECT ',' + a.[StreetNumber] + a.[StreetName] FROM [dbo].[tblAddress] a Where a.[InstrumentID] = i.[InstrumentID] ORDER BY a.[StreetName] FOR XML PATH (''), TYPE).value('.', 'varchar(max)'), 1, 1, '') AS Address,
STUFF(( SELECT '' + d.[District] + ' ' +d.[Square]+ ' ' + d.[Lot] + ', ' FROM [dbo].[tblDLS] d WHERE d.[InstrumentID] = i.[InstrumentID] FOR XML PATH (''), TYPE).value('.', 'varchar(max)'), 1, 1,'') AS DSL
FROM [dbo].[tblInstrument] i
INNER JOIN [dbo].[tblInstrumentType] it ON i.[InstrumentTypeID] = it.[InstrumentTypeID]
WHERE InstrumentNumber = 1
ORDER BY InstrumentNumber, InstrumentType
这是我的输出
只要得到结果就没有错。问题是获取数据垂直。 这是我的程序的屏幕截图:
这是显示信息的 aspx 代码:
<Columns>
<asp:TemplateField HeaderText="Instrument #, Type, Dist., Squ. , Lot">
<ItemTemplate>
<asp:LinkButton ID="LbPath" runat="server"
Text='<%# String.Format("{0} {1}", Eval("InstrumentNumber"), Eval("InstrumentType")) %>'
CommandName="GetInstrument"
CommandArgument='<%#Bind("instrumentID") %>'>
</asp:LinkButton>
<br />
<asp:Label ID="lblDateFiled" runat="server" Text='<%# Eval("DateTimeFiled") %>'> </asp:Label>
<br />
<asp:Label ID="lblNANumber" runat="server" Font-Names="Segoe UI Semibold" Font-Size="Medium" Text="NA Number: " ForeColor="#434343"></asp:Label><%# Eval("NANumber") %>
<br />
<br />
<asp:Label ID="lblDSL" runat="server" Text='<%#Eval("DSL") %>'> </asp:Label>
<%--<asp:Label ID="lblDSL" runat="server" Text='<%# String.Format("{0} {1} {2}", Eval("District"), Eval("Square"), Eval("Lot")) %>'> </asp:Label> --%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name, Address" SortExpression="Surname">
<ItemTemplate>
<EditItemTemplate>
<%-- <asp:Label ID="label1" runat="server" Text='<%# Bind("instrumentID") %>' ></asp:Label>--%>
</EditItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
<%-- <asp:Label ID="lblName" runat="server" Text='<%# String.Format(" {0}, {1} ({2})", Eval("Surname"), Eval("GivenName"), Eval("Namecode")) %>'></asp:Label>--%>
<br />
<asp:Label ID="lblAddress" runat="server" Font-Names="Segoe UI Semibold" Font-Size="Medium" Text='<%# Eval("Address") %>'></asp:Label>
<%--<asp:Label ID="lblAddress" runat="server" Font-Names="Segoe UI Semibold" Font-Size="Medium" Text='<%# String.Format("{0} {1} {2}", Eval("Subdivision"), Eval("StreetNumber"), Eval("StreetName")) %>'></asp:Label>--%>
</ItemTemplate>
</asp:TemplateField>
<%-- <asp:BoundField DataField="InstrumentType" HeaderText="Instrument Type" InsertVisible="false" ReadOnly="true" SortExpression="InstrumentType" />
<asp:BoundField DataField="NANumber" HeaderText="NANumber" InsertVisible="false" SortExpression="NANumber" />
<asp:BoundField DataField="DateTimeFiled" HeaderText="DateTimeFiled" InsertVisible="false" ReadOnly="true" SortExpression="DateTimeFiled" />--%>
</Columns>
【问题讨论】:
-
我不明白。如何显示数据与 Sql Server 有什么关系?
-
这感觉更像是一个表示层请求。即使那样,也不清楚你在垂直方向上的意思。您是否在一个单元格中寻找垂直的姓名和地址?如果是这样,并且假设是 HTML,则只需在构造字符串时添加
。此外,由于您是 2017 年,您可以使用 string_agg() 代替 stuff/xml 方法。 -
@JohnCappelletti 是的,您可以说表示层。我编辑了我的问题并增加了清晰度,看看是否有帮助。我试图让数据以垂直堆叠的方式显示在一列中,而不是在带有分隔符的一行中内联显示。感谢您抽出宝贵的时间
标签: c# sql sql-server-2017 aspxgridview for-xml-path