2017-08-22 9 views
0

グリッドビューを構築しようとしていますが、テキストにリンクしているときにHyperLinkFieldを使用して1つのフィールドからテキストを表示する必要があります別のものから。この場合、NavigateURLに使用しようとしているテキストは、pdfの名前です。私が現在HyperLinkFieldのNavigateURLのテキストを取得するために使用しているメソッドは、クエリのフィールドから最初の値を取得するだけなので、正しいテキストが表示されますが、NavigateURLは最初の値を除くすべてが正しくありません。HyperLinkField NavigateURLをSQL列値に設定する方法C#ASP.Net Webフォーム

ここは、aspxページのgridviewです。

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

そして、ここで私が多くをコーディングしないと、私はC#にはかなり新しいので、私、私は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."; 
      } 

を構築するために使用していることの背後にあるコードからのコードですこれは恐らくDBをクエリしてグリッドビューを構築する恐ろしい方法だと認識しています。そのためコードを改善する方法についての推奨事項はありませんが、私の主な質問はどうすれば得られますか

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

フィールドの各行のbidd_nameを最初の1文字ではなく含むようにしますか?

答えて

0

私自身の答えが見つかりました。 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"; 
関連する問題