【问题标题】:How extract text from datagrid in asp.net如何从asp.net中的datagrid中提取文本
【发布时间】:2014-05-22 09:02:56
【问题描述】:

这是我的数据网格视图:

<a name="tagCompaniesDatagrid"></a>
        <asp:datagrid id="dgCompanies" Width="100%" ...
            <Columns>
                <asp:TemplateColumn SortExpression="companyName" HeaderText="Company Name">
                    <HeaderStyle Width="40%" />
                    <ItemTemplate>
                        <table cellSpacing="0" cellPadding="0" width="100%" border="0">
                            <tr>
                                <td width="95%">
                                    <asp:LinkButton CssClass="LinkButton" id="btnView" Runat="server" CommandName="ViewDetails" CommandArgument="<%# GetViewUrl((System.Data.Common.DbDataRecord)Container.DataItem) %>">
                                        <span ID="SpanTitle" Runat="server">
                                            <%# DataBinder.Eval(Container.DataItem,"companyName") %>
                                        </span>
                                    </asp:LinkButton>
                                    <asp:Label CssClass="DGNormal" ID="lblStatus" Runat="server" text='<%# StatusToText((int) DataBinder.Eval(Container.DataItem,"statusId")) %>'/>
                                    <asp:Image visible='<%# (bool) DataBinder.Eval(Container.DataItem,"WMCCMRated") %>' ID="imgProfiled" Runat="server" ImageUrl="~/images/WMCCMRated.gif" AlternateText="This company has been competency profiled by WMG" />
                                    <asp:Image Visible='<%# !(Convert.IsDBNull(DataBinder.Eval(Container.DataItem,"feedback")))%>' ID="feedback" Runat="server" ImageUrl="~/images/feedback.gif" AlternateText="The number of feedback this company has been received is ->" ImageAlign="Bottom" Height="18px" Width="12px"/>
                                    <asp:Label CssClass="NormalBold" ID="lblFeedback" Runat="server" text='<%# DataBinder.Eval(Container.DataItem,"feedback") %>' ForeColor="Navy"/>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <span class="DGNormalBold">
                                        <%# DataBinder.Eval(Container.DataItem,"phoneNumber") %>
                                    </span>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <span class="DGNormal" ID="SpanProfile" Runat="server">
                                        <%# cutToNCharacters((string)DataBinder.Eval(Container.DataItem,"Profile")) %>
                                    </span>
                                </td>
                            </tr>
                        </table>
                    </ItemTemplate>
                    <FooterTemplate>
                        <cc1:DropDownCombo ID="dplCompanies" Runat="server" Width="95%" DataTextField="CompanyName" DataValueField="CompanyId" DataSource='<%# GetCompanyNames() %>' />
                    </FooterTemplate>
                </asp:TemplateColumn>
                <asp:TemplateColumn SortExpression="address" HeaderText="Address">
                    <HeaderStyle Width="15%" />
                    <ItemTemplate>
                        <table cellSpacing="0" cellPadding="0" width="100%" border="0">
                            <tr>
                                <td>
                                    <span class="DGNormal" ID="SpanAddress" Runat="server">
                                        <%# DataBinder.Eval(Container.DataItem,"address")%>
                                    </span>
                                </td>
                            </tr>
                        </table>
                    </ItemTemplate>
                </asp:TemplateColumn>
                <asp:TemplateColumn SortExpression="keyProcessList" HeaderText="Key Processes">
                    <HeaderStyle Width="15%" />
                    <ItemTemplate>
                        <table cellSpacing="0" cellPadding="0" width="100%" border="0">
                            <tr>
                                <td>
                                    <span class="DGNormal" ID="SpanKeyProcesses" Runat="server">
                                        <%# DataBinder.Eval(Container.DataItem,"keyProcessList") %>
                                    </span>
                                </td>
                            </tr>
                        </table>
                    </ItemTemplate>
                </asp:TemplateColumn>
                <asp:TemplateColumn SortExpression="keySkillList" HeaderText="Key Skills">
                    <HeaderStyle Width="15%" />
                    <ItemTemplate>
                        <table cellSpacing="0" cellPadding="0" width="100%" border="0">
                            <tr>
                                <td>
                                    <span class="DGNormal" ID="SpanKeySkills" Runat="server">
                                        <%# DataBinder.Eval(Container.DataItem,"keySkillList") %>
                                    </span>
                                </td>
                            </tr>
                        </table>

                </ItemTemplate>

....

我想获取 companyName,我认为它存储在 span ID="SpanTitle" 中。 所以我尝试了这个:

int j = 0;
               foreach (DataGridItem item in dgCompanies.Items)
               {
                   Label name = (Label)item.Cells[j].FindControl("SpanTitle");

                 using (StreamWriter _testData = new StreamWriter(Server.MapPath("~/DataTableRows.txt"), true))
                {
                    string drstring = Convert.ToString(name.Text);
                    _testData.WriteLine(drstring); // Write the file.
                }
                 j = j + 1;

             }

但我得到了错误 "Unable to cast object of type 'System.Web.UI.HtmlControls.HtmlGenericControl' to type 'System.Web.UI.WebControls.Label'." 如何从我的数据网格中获取 companyName 的文本?

【问题讨论】:

    标签: c# asp.net datagrid


    【解决方案1】:

    您的 aspx 标记 &lt;span ID="SpanTitle" Runat="server"&gt; 不是 &lt;asp:Label&gt;。所以请将其转换为 HtmlGenericControl 并获取 InnerText

    HtmlGenericControl name = (HtmlGenericControl)
                               item.Cells[j].FindControl("SpanTitle");
    
    string drstring = name.InnerText.Trim(); // Trim to remove extra spaces
    

    【讨论】:

    • @user1314404,我更新了我的答案。这是一个错字使用InnerHtmlInnerText。 InnerText 是合适的
    • 谢谢,你说得对!但是我可以在没有周围空间的情况下获得名称吗?当我写文件时,我看到名字前面有一个很大的空格。有什么方法可以让我获得确切的名称,因为我需要使用它来查询数据库?
    • 这是简短、准确和完美的答案!我也想就我在这个数据网格上的相关问题寻求你的帮助:stackoverflow.com/questions/23774851/…
    • @user1314404,添加了答案。检查一下,让我知道你现在遇到了什么错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    相关资源
    最近更新 更多