繁体   English   中英

如何将HyperLinkField NavigateURL设置为SQL列值C#ASP.Net Web窗体

[英]How to set HyperLinkField NavigateURL to SQL Column Values C# ASP.Net Web Forms

我正在尝试构建一个gridview,并且一些列需要使用HyperLinkField来显示一个字段中的文本,同时链接到另一个字段中的文本。 在这种情况下,我要用于NavigateURL的文本是pdf的名称。 我当前用于获取HyperLinkField的NavigateURL文本的方法只是从查询中的字段中获取第一个值,因此将显示正确的文本,但NavigateURL对于除第一个值以外的所有内容都不正确。

这是aspx页面中的gridview。

<asp:GridView ID="PaperProp" RowStyle-BackColor="#f4f4f4" HeaderStyle-BackColor="#CFDBE5" runat="server" AutoGenerateColumns="False" >
                        <columns>
                        </columns>
                        </asp:GridView> 

这是我用来构建gridview的代码背后的代码

string PaperPropQuery = "SELECT bidd_number, bidd_name, bidd_desc, prebid_req, open_dt, buyer, bidd_status, Addendum FROM vPaper_Proposals ORDER BY CONVERT(DateTime, open_dt,101) DESC";
        SqlCommand cmd2 = new SqlCommand(PaperPropQuery, new SqlConnection(ConStr));

        cmd2.Connection.Open();
        var cmdr2 = cmd2.ExecuteReader();

            if (cmdr2.Read())
            {
                LinkField = new HyperLinkField();

                LinkField.HeaderText = "RFP No.";
                LinkField.DataTextField = "bidd_number";
                LinkField.HeaderStyle.CssClass = "GVpadding";
                LinkField.ItemStyle.CssClass = "GVpadding";
                LinkField.NavigateUrl = "./bids/" + cmdr2["bidd_name"].ToString();
                LinkField.Target = "_blank";

                PaperProp.Columns.Add(LinkField);

                TextField = new BoundField();

                TextField.HeaderText = "Description";
                TextField.DataField = "bidd_desc";
                TextField.HeaderStyle.CssClass = "GVpadding";
                TextField.ItemStyle.CssClass = "GVpadding";

                PaperProp.Columns.Add(TextField);

                LinkField = new HyperLinkField();

                LinkField.HeaderText = "PreBid";
                LinkField.DataTextField = "prebid_req";
                LinkField.HeaderStyle.CssClass = "GVpadding";
                LinkField.ItemStyle.CssClass = "GVpadding";

                PaperProp.Columns.Add(LinkField);

                TextField = new BoundField();

                TextField.HeaderText = "Open Date";
                TextField.DataField = "open_dt";
                TextField.HeaderStyle.CssClass = "GVpadding";
                TextField.ItemStyle.CssClass = "GVpadding";

                PaperProp.Columns.Add(TextField);

                LinkField = new HyperLinkField();

                LinkField.HeaderText = "Buyer";
                LinkField.DataTextField = "buyer";
                LinkField.HeaderStyle.CssClass = "GVpadding";
                LinkField.ItemStyle.CssClass = "GVpadding";
                LinkField.NavigateUrl = "";

                PaperProp.Columns.Add(LinkField);

                TextField = new BoundField();

                TextField.HeaderText = "Status";
                TextField.DataField = "bidd_status";
                TextField.HeaderStyle.CssClass = "GVpadding";
                TextField.ItemStyle.CssClass = "GVpadding";

                PaperProp.Columns.Add(TextField);

                LinkField = new HyperLinkField();

                LinkField.HeaderText = "Addendum";
                LinkField.DataTextField = "Addendum";
                LinkField.HeaderStyle.CssClass = "GVpadding";
                LinkField.ItemStyle.CssClass = "GVpadding";

                PaperProp.Columns.Add(LinkField);

                cmdr2.Close();

                PaperProp.DataSource = cmd2.ExecuteReader();
                PaperProp.DataBind();

                cmd2.Connection.Close();
                cmd2.Connection.Dispose();
            }
            else
            {
                PaperProplbl.Text = "None at this time.";
            }

我编写的代码不多,而且我对C#还是很陌生,所以我知道这可能是查询数据库和构建gridview的一种糟糕方法,因为我愿意接受有关如何改进代码,但是我的主要问题是如何获得

LinkField.NavigateUrl =“ ./bids/” + cmdr2 [“ bidd_name”]。ToString();

在字段中包含每一行的bidd_name而不是仅包含第一行?

找到了我自己的答案。 您可以使用DataNavigateUrlFields和DataNavigateUrlFormatString创建表示查询数据的URL。

        string PaperInfoQuery = @"SELECT pi.bidd_number, pi.bidd_name, pi.bidd_desc, pi.prebid_req, pi.open_dt, pi.buyer, 
                                pi.bidd_status, pi.Addendum, ct.code_description AS Email FROM vPaperInformation pi LEFT OUTER JOIN 
                                Code_Table ct ON ct.code_table_cd = pi.buyer + ' EM' ORDER BY CONVERT(DateTime, open_dt,101) DESC";
        string ConStr = "server=sqltest;database=OnlineBidders;UID=xxxx;password=xxxx";
        SqlCommand cmd = new SqlCommand(PaperInfoQuery, new SqlConnection(ConStr));

        cmd.Connection.Open();

        var cmdr = cmd.ExecuteReader();

        HyperLinkField LinkField = new HyperLinkField();
        BoundField TextField = new BoundField();

        if (cmdr.Read())
        {
            string[] UrlFields = { "bidd_name" };

            LinkField.HeaderText = "RFI No.";
            LinkField.DataTextField = "bidd_number";
            LinkField.HeaderStyle.CssClass = "GVpadding";
            LinkField.ItemStyle.CssClass = "GVpadding";
            LinkField.DataNavigateUrlFields = UrlFields;
            LinkField.DataNavigateUrlFormatString = "./bids/{0}";
            LinkField.Target = "_blank";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM