带有长文本的GridView列

时间:2014-04-15 12:13:16

标签: asp.net gridview

我有一个包含多个列的GridView,它会填充我想要的内容,但其中一列可以包含相当多的文本。为了尝试并很好地呈现它,我希望能够在其下方的行中显示该列,因此跨越所有列:

作为一个简化的例子,我现在有:

Name  DOB        Sex  Comments   Title
Ian   15/04/2015 M    This is    MR
                      the text
                      that keeps
                      wrapping

我更喜欢它像

Name  DOB        Sex  Comments   Title
Ian   15/04/2015 M    This is    MR
Comments: This is the text that keeps wrapping 

显然这是一个非常简单的例子,但希望它能解释我想要做的事情。我现在的GridView代码如下,我想将intScore移到下一行。

<asp:GridView ID="gvwClinical" runat="server" DataKeyNames="intClinicalAssessID"     OnRowDataBound="gvwGrids_RowBound" OnRowDeleting="gvwGrids_Delete"    OnSelectedIndexChanging="gvwClinical_SelectedIndexChanged" OnSorting="gvwSort"   OnPageIndexChanging="gvwPage">
    <Columns>
        <asp:BoundField Visible="False" DataField="intClinicalAssessID"></asp:BoundField>
        <asp:ButtonField Text="View" CommandName="Select" ButtonType="image"></asp:ButtonField>
        <asp:ButtonField Text="Delete" CommandName="Delete" ButtonType="image"></asp:ButtonField>
        <asp:BoundField DataField="dteAssessmentDate" HeaderText="Assess. Date" SortExpression="dteAssessmentDate"></asp:BoundField>
        <asp:BoundField DataField="intScores" HeaderText="Scores" SortExpression="intScores" HtmlEncode="false"></asp:BoundField>
        <asp:BoundField DataField="intHeight" HeaderText="Height" SortExpression="intHeight"></asp:BoundField>
        <asp:BoundField DataField="intWeight" HeaderText="Weight" SortExpression="intWeight"></asp:BoundField>
        <asp:BoundField DataField="strWellBeing" HeaderText="Gen Well Being" SortExpression="strWellBeing"></asp:BoundField>
        <asp:BoundField DataField="strAbdominalPain" HeaderText="Abdo Pain" SortExpression="strAbdominalPain"></asp:BoundField>
        <asp:BoundField DataField="strAbdominalMass" HeaderText="Abdo Mass" SortExpression="strAbdominalMass"></asp:BoundField>
        <asp:BoundField DataField="strBowelFreqDay" HeaderText="Bowel Freq (day)" SortExpression="strBowelFreqDay"></asp:BoundField>
        <asp:BoundField DataField="strBowelFreqNight" HeaderText="Bowel Freq (night)" SortExpression="strBowelFreqNight"></asp:BoundField>
        <asp:BoundField DataField="strStoolUrgency" HeaderText="Defecation Urgency" SortExpression="strStoolUrgency"></asp:BoundField>
        <asp:BoundField DataField="intLiquidStoolCount" HeaderText="Lq Stools 24 Hrs" SortExpression="intLiquidStoolCount"></asp:BoundField>
        <asp:BoundField DataField="strRectalBleeding" HeaderText="Rectal Bleeding" SortExpression="strRectalBleeding"></asp:BoundField>
        <asp:BoundField DataField="strEndoscopyFindings" HeaderText="Endo Findings" SortExpression="strEndoscopyFindings"></asp:BoundField>
        <asp:BoundField DataField="strGlobalAssess" HeaderText="Gbl Assessment" SortExpression="strGlobalAssess"></asp:BoundField>
        <asp:BoundField DataField="intActiveFistula" HeaderText="Active Fistula" SortExpression="intActiveFistula"></asp:BoundField>
        <asp:BoundField DataField="intTemperature" HeaderText="Temp." SortExpression="intTemperature"></asp:BoundField>
        <asp:BoundField DataField="intPulse" HeaderText="Pulse" SortExpression="intPulse"></asp:BoundField>
        <asp:BoundField DataField="intHB" HeaderText="Hb" SortExpression="intHB"></asp:BoundField>
        <asp:BoundField DataField="intHCT" HeaderText="Hct" SortExpression="intHCT"></asp:BoundField>
        <asp:BoundField DataField="intCRP" HeaderText="CRP" SortExpression="intCRP"></asp:BoundField>
        <asp:BoundField DataField="strComplications" HeaderText="Complications" SortExpression="strComplications"></asp:BoundField>
    </Columns>
</asp:GridView>

1 个答案:

答案 0 :(得分:0)

您可以使用TemplateField。这样您就可以将较长的文本放在其余字段下面,因为您可以按列设计布局,如果只使用一个TemplateField则可以设置行。如果您的DataSource提供它们,您可以在一个TemplateField中绑定和Eval尽可能多的DataField和html:

<Columns>
<asp:TemplateField HeaderText="Header1" SortExpression="fieldname1">
    <ItemTemplate>
       <asp:Label ID="Label1" runat="server" Text='<%# Bind("fieldname1") %>'></asp:Label>
       <hr>
       <asp:Label ID="Label1" runat="server" Text='<%# Eval("fieldname2") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

请注意,这会产生副作用。您只能为添加的每个TemplateField添加列标题,因此在使用这些字段时,使用GridView的默认设置为每个DataField排序数据可能会变得棘手或几乎不可能。由于TemplateFields的行为与普通的BoundFields类似,因此可以将BoundFields和TemplateFields组合在一行,但不能让TemplateField显示在其他列的下方。

据我所知,在TemplateField中使用BoundFields是不可能的,如果您真正想要的话可​​能正在寻找Pivot网格,那将是一个更好的主意。但是,如果Pivot网格的高度可配置性和足迹适合您的解决方案是另一个问题。

希望这有助于为您的挑战寻找灵感。祝你好运!