2017-02-24 19 views
2

他のサイトからのデータを処理し、その情報をgridviewに表示するASP.NET Webアプリケーションがあります。グリッドビューの行数や列数はわかりません。ASP.NET GridViewのボタン/リンクにhrefを追加する方法

このグリッドビューには、チェックボックスを追加するために使用したテンプレートフィールドがあります。 残りの列は、このグリッドビューにバインドするDataTableを使用して追加されます。問題は今、10列の後に、ボタンまたはリンクとして表示したいURLがあることです。このリンクの後には、x nrの列があります。

静的な列と動的な列の間にあるこのURLを、動的な行を持つGridViewに追加するにはどうすればよいですか?

私はDataTableにhref = link ..を書きましたが、テキストとして表示しました。 HtmlDecodeで何かを示唆する記事が見つかりましたが、うまくいくためには、htmlencode = false..orというようなものを設定するboundfieldsを使う必要があります。

これを実行する方法はありますか?または私はちょうどチェックボックスを持つitemtemplateのリンクを移動し、そこに設定しようとする必要がありますか?

enter image description here

+0

あなたの現在のビューの写真をいくつか投稿できますか?それは多くを明確にするのに役立ちます。 – Cullub

+0

データのバインド方法を確認することも役立ちます –

+0

画像が追加されました。トップテーブルは私が今持っているものです。一番下のものは私がそれが欲しいものです。希望が助けます – Cosmos24Magic

答えて

1

あなたはそのためOnRowDataBoundを使用することができます。余分なセルがGridViewに挿入されます。また、をGridViewにバインドする前に、DataTable に余分な列を挿入することもできます。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //header 
    if (e.Row.RowType == DataControlRowType.Header) 
    { 
     //add 6 cells 
     for (int i = 1; i <= 6; i++) 
     { 
      TableHeaderCell headerCell = new TableHeaderCell(); 

      if (i == 6) 
      { 
       headerCell.Text = "URL"; 
      } 
      else 
      { 
       headerCell.Text = "Static " + i; 
      } 

      //add the new cell to the gridview 
      e.Row.Cells.AddAt(i, headerCell); 
     } 
    } 

    //normal row 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     //cast the current row to a datarowview 
     DataRowView row = e.Row.DataItem as DataRowView; 

     //add 6 cells 
     for (int i = 1; i <= 6; i++) 
     { 
      TableCell cell = new TableCell(); 

      if (i == 6) 
      { 
       cell.Text = string.Format("<a target=\"_blank\" href=\"{0}\">{0}</a>", row["myURL"]); 
      } 
      else 
      { 
       cell.Text = "Enter stuff here..."; 
      } 

      //add the new cell to the gridview 
      e.Row.Cells.AddAt(i, cell); 
     } 
    } 
} 
+0

私はあなたが示唆したようにして、ボタンがGridViewに表示されますが、それをクリックすると消えます。私はそれがテーブルを更新しないように私ができることを知っていますか?私はif(!Page.IsPostBack){..}のような何かをするべきだと推測していますが、どこに置くべきか正確には分かりません。 – Cosmos24Magic

+0

ボタンをポストバックにしないようにするには、 "return = false"をOnClientClick()。できます。ありがとうございました ! – Cosmos24Magic

+0

私は、RowDataBoundで動的に追加された要素が、次のポストバックまで保持されることを知りました。私は何かをポストバックしてはいけない、私のページにいくつかの他のボタンがあります。私は、たとえば、いくつかのエクスポートボタンをExcelに持っていて、それらをクリックすると、動的に追加されたボタンが消えてしまいます。この行動を止めるために私は何ができますか?私はすべての私のボタンをjavascriptで動かす必要がありますか?可能であれば、ページロードの「ボタンを追加」部分を移動して、これは起こらないようにしますが、できません。私はダイナミックにそれを必要とします。どんな解決策ですか?ありがとう! – Cosmos24Magic

2

あなたは、列の上に見て、あなたが必要とボタンを追加するMatchGrid_RowDataBoundメソッドを使用することができます。ここ
はRowDataBoundでボタンを追加する方法の例です:

How do I programmatically add a button to a gridview and assign it to a specific code-behind function?

+0

私はこれをRowDataBoundのようにしてみました:LinkBut​​ton artLink = new LinkBut​​ton(); artLink.OnClientClick = "window.open( '" + currentUrl + "');"; artLink.Text = "記事を表示する" + e.Row.Cells [3] .Text; e.Row.Cells [12] .Controls.Add(artLink); //リンクが表示されましたが、一度しか動作しません。私はそれをクリックした後、それは消えて – Cosmos24Magic

関連する問題