在一个ASP.Net web窗体中有一个GridView。我们希望在这个GridView中有一个固定大小的列,并且其中的文本也可以进行文字换行。我们无法实现它的工作。制作一个ASP.Net GridView列一个固定的大小并做文字换行
这里是我试过的标记:
<asp:BoundField DataField="AssignmentDetails" HeaderText="Assignment"
SortExpression="AssignmentDetails" ItemStyle-Width="20" ItemStyle-Wrap="true">
<HeaderStyle HorizontalAlign="Left" />
<ItemStyle HorizontalAlign="Left" />
</asp:BoundField>
我们认为这将使立柱偏出20个字符,使自动换行,但它没有做到这一点。
*更新*
它现在的工作基础上达伦的编码样本。这里是GridView和使用他的技术背后的代码的完整标记:
<asp:GridView
ID="GridViewSummary"
runat="server"
AllowSorting="True"
AutoGenerateColumns="False"
DataKeyNames="ID"
Width="691px"
AllowPaging="True"
PageSize="5"
OnRowDataBound="GridViewSummary_RowDataBound">
<Columns>
<asp:BoundField DataField="AssignmentDate" HeaderText="Date"
SortExpression="AssignmentDate" DataFormatString="{0:MM/dd/yyyy}">
<HeaderStyle HorizontalAlign="Left" />
<ItemStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:BoundField DataField="AssignmentDueDate" HeaderText="Date Due"
SortExpression="AssignmentDueDate" DataFormatString="{0:MM/dd/yyyy}">
<HeaderStyle HorizontalAlign="Left" />
<ItemStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:BoundField DataField="Class" HeaderText="Class"
SortExpression="Class">
<HeaderStyle HorizontalAlign="Left" />
<ItemStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:BoundField DataField="TeacherName" HeaderText="Teacher"
SortExpression="TeacherName">
<HeaderStyle HorizontalAlign="Left" />
<ItemStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:TemplateField HeaderText="Assignment" SortExpression="AssignmentDetails">
<ItemTemplate>
<asp:Label ID="LabelAssignment" runat="server" Text='<%# Bind("AssignmentDetails") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle HorizontalAlign="Left" />
<ItemStyle HorizontalAlign="Left" Wrap="True" />
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:Button
ID="ButtonSelect"
runat="server"
CausesValidation="False"
CommandName="Select"
Text="Select Assignment Details" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
代码隐藏:
Protected Sub GridViewSummary_RowDataBound(sender As Object, e As GridViewRowEventArgs)
' Deal with Data type rows, and not headers etc.
'-----------------------------------------------
If (e.Row.RowType = DataControlRowType.DataRow) Then
Dim lblAssignment As Label = e.Row.FindControl("LabelAssignment")
' Call a recursive method and insert a line break every 20 chars.
'----------------------------------------------------------------
lblAssignment.Text = InsertlineBreak(lblAssignment.Text)
End If
End Sub
Function InsertlineBreak(ByVal original As String) As String
Dim MaxStringLength As Int16 = 20
If original.Length > MaxStringLength Then
Dim indexOfSpace = original.IndexOf(" ", MaxStringLength - 1)
If indexOfSpace <> -1 AndAlso indexOfSpace <> original.Length - 1 Then
Dim firstString As String = original.Substring(0, indexOfSpace)
Dim secondString As String = original.Substring(indexOfSpace)
Return firstString & "<br/>" & InsertlineBreak(secondString)
Else
Return original
End If
Else
Return original
End If
End Function
我也是在这个标记应用这个技术对我们的DetailsView控件以及所示和代码隐藏:
<asp:TemplateField HeaderText="Details:" SortExpression="AssignmentDetails">
<EditItemTemplate>
<asp:TextBox ID="TextBoxAssignmentDetails" runat="server" Text='<%# Bind("AssignmentDetails") %>' TextMode="MultiLine"
rows="5"></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBoxAssignmentDetails" runat="server" Text='<%# Bind("AssignmentDetails") %>' TextMode="MultiLine"
rows="5"></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label
ID="LabelAssignmentDetails"
runat="server"
Text='<%# Bind("AssignmentDetails") %> '
OnDataBinding="LabelAssignmentDetails_DataBinding">
</asp:Label>
</ItemTemplate>
<ItemStyle ForeColor="Blue" />
</asp:TemplateField>
代码隐藏:
Protected Sub LabelAssignmentDetails_DataBinding(sender As Object, e As EventArgs)
Dim lblAssignment As Label = DetailsView.FindControl("LabelAssignmentDetails")
' Call a recursive method and insert a line break every 20 chars.
'----------------------------------------------------------------
lblAssignment.Text = InsertlineBreak(lblAssignment.Text)
End Sub
包装的实际字符将是最适合RowDataBound事件 - 基本上每20个字符添加一个换行符。 – Darren 2013-04-11 18:50:40
感谢您的回复。你能展示编码样本吗? – 2013-04-11 18:55:13
当然,一个来吧 – Darren 2013-04-11 19:17:14