在 C# 中使用省略号和工具提示修剪 Gridview 字段

问题描述 投票:0回答:1

我在使用这个 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&nbsp;&nbsp;&nbsp;" 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。 谢谢!

c# asp.net gridview trim
1个回答
0
投票

请记住,存在两种非常不同的方式来引用 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,否则此类代码将永远无法工作。

© www.soinside.com 2019 - 2024. All rights reserved.