我在使用这个 GridView 时遇到了一些麻烦。 昨天我实际上让这个函数工作了,但最终将我的 Gridview 更改为使用 ItemTemplate 而不是 Databound 字段,现在该函数不再工作,并且我所有查找问题的尝试都失败了。 我希望能够修剪较长的字段,并在工具提示上显示全文。
这是我的 GridView 代码:
<asp:GridView ID="ItemView" runat="server" AutoGenerateColumns="false" AllowPaging="true"
HorizontalAlign="Center"
PageSize="10" HeaderStyle-BackColor="#6f263d" HeaderStyle-ForeColor="White" CellPadding="7"
CellSpacing="0" DataKeyNames="orderItemId" AllowSorting="True"
AlternatingRowStyle-BorderStyle="Solid" AlternatingRowStyle-BackColor="White"
AlternatingRowStyle-ForeColor="#6f263d" AlternatingRowStyle-CssClass="fancylink"
Font-Size="Small" RowStyle-BackColor="#63666A" RowStyle-BorderStyle="None"
RowStyle-ForeColor="White" SelectedRowStyle-BackColor="#D3D0C8"
SelectedRowStyle-ForeColor="Black" Width="100%"
OnSelectedIndexChanged="ItemView_SelectedIndexChanged" ShowHeaderWhenEmpty="false"
PagerStyle-CssClass="fancylink" PagerStyle-BackColor="#6f263d" PagerStyle-ForeColor="White"
PagerSettings-FirstPageText="First Page " PagerSettings-Mode="NextPrevious"
PagerSettings-NextPageText="Next Page" PagerSettings-LastPageText="End"
PagerSettings-PreviousPageText="Previous Page" PagerStyle-HorizontalAlign="Center"
PagerStyle-Width="20%" OnPageIndexChanging="OnPageIndexChanging"
OnRowDataBound="ItemView_RowDataBound" OnRowEditing="ItemView_EditRow"
OnRowUpdating="ItemView_OnRowUpdating" BorderStyle="None"
OnRowCancelingEdit="ItemView_RowCancelingEdit" OnRowDeleting="ItemView_DeleteRow"
OnSelectedIndexChanging="ItemView_OnSelectedIndexChanging" AutoGenerateSelectButton="False">
<Columns>
<asp:TemplateField HeaderText="ID">
<ItemTemplate>
<asp:Label ID="lbl_itemId" runat="server" Text='<%#Eval("orderItemId") %>'
ReadOnly="True"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Item">
<ItemTemplate>
<asp:LinkButton ID="btn_Select" runat="server" Text='<%#Eval("item") %>'
CommandName="Select" ItemStyle-HorizontalAlign="Center" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="PO Num">
<ItemTemplate>
<asp:Label ID="lbl_poNum" runat="server" Text='<%#Eval("poNum") %>'
NullDisplayText="--"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txt_poNum" runat="server" Text='<%#Eval("poNum") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Item Amount">
<ItemTemplate>
<asp:Label ID="lbl_amount" runat="server" Text='<%#Eval("amount") %>'
NullDisplayText="--"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txt_amount" runat="server" Text='<%#Eval("amount") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Quantity">
<ItemTemplate>
<asp:Label ID="lbl_quantity" runat="server" Text='<%#Eval("quantity") %>'
NullDisplayText="--"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txt_quantity" runat="server" Text='<%#Eval("quantity") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Date Ordered">
<ItemTemplate>
<asp:Label ID="lbl_ordered" runat="server" Text='<%#Eval("ordered") %>'
NullDisplayText="--"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txt_ordered" runat="server" Text='<%#Eval("ordered") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Date Received">
<ItemTemplate>
<asp:Label ID="lbl_received" runat="server" Text='<%#Eval("received") %>'
NullDisplayText="--"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txt_received" runat="server" Text='<%#Eval("received") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Tech Notes">
<ItemTemplate>
<asp:Label ID="lbl_techNotes" runat="server" Text='<%#Eval("techNotes") %>'
NullDisplayText="--"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txt_techNotes" runat="server" Text='<%#Eval("techNotes") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="btn_Edit" runat="server" Text="Edit" CommandName="Edit"
ItemStyle-HorizontalAlign="Center" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="btn_Update" runat="server" Text="Update" CommandName="Update"
ItemStyle-HorizontalAlign="Center" />
<asp:LinkButton ID="btn_Cancel" runat="server" Text="Cancel" CommandName="Cancel"
ItemStyle-HorizontalAlign="Center" />
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
需要修剪的 2 个字段位于
lbl_item
和 lbl_techNotes
。
这是我正在尝试开始工作的代码隐藏:
protected void ItemView_RowDataBound(object sender, GridViewRowEventArgs e)
{
int i = 0;
if (e.Row.RowType == DataControlRowType.DataRow)
{
foreach (TableCell cell in e.Row.Cells)
{
i++;
string s = cell.Text;
int maxLength = 50;
if ((cell.Text.Length > maxLength) && ((i == 1) || (i == 8)))
cell.Text = cell.Text.Substring(0, maxLength) + "...";
cell.ToolTip = s;
}
}
}
注意:我确实尝试查看那些特定的单元格,但这也不起作用。 我认为我没有正确地针对这些细胞做一些事情。
非常感谢任何帮助。 我已经用尽了网上能找到的所有东西。 我真的还不太精通使用 GridViews。 谢谢!
请记住,存在两种非常不同的方式来引用 GridView 中的控件。
如果 GV 中的控件是自动生成的,或者它们是数据字段,那么您可以使用 cells[] 集合。
如果 GV 中的控件是模板化列(因此,使用 .net 控件,例如文本框或标签),则必须使用该给定行的 .FindControl。
鉴于您的标记,那么您显然正在使用模板化控件,因此您不能使用 .cells() 集合,而是使用给定 GV 行的 .FindControl 方法。
因此,以下代码应该有效:
const int maxLength = 50;
if (e.Row.RowType == DataControlRowType.DataRow)
{
Label LblItemID = (Label)e.Row.FindControl("LblItem");
string s = LblItemID.Text;
LblItemID.Text = s.Substring(0, maxLength) + "...";
LblItemID.ToolTip = s;
Label lbl_techNotes = (Label)e.Row.FindControl("lbl_techNotes");
s = lbl_techNotes.Text;
lbl_techNotes.Text = s.Substring(0, maxLength) + "...";
lbl_techNotes.ToolTip = s;
}
另外,你看起来有一个 type-o,因为:
lbl_item 和 lbl_techNotes 需要修剪的 2 个字段。
我在 GV 标记中没有看到 lbl_item,但只能在标记中找到并看到名为“lbl_itemId”的内容。因此,除非您弄清楚要更改什么控件 ID,否则此类代码将永远无法工作。