2016-04-18 20 views
1

データベースから説明テキストを取得するGridviewを持っていて、テキストの制限を超えると、ユーザーが "Read more"新しいURLにナビゲートする必要はありません。前もって感謝します。追加Read moreボタンをクリックしてGridviewを表示する説明テキスト

<asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" InsertVisible="False" ReadOnly="True" /> 
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
<asp:BoundField DataField="Address" HeaderText="Address" SortExpression="Address" /> 
<asp:BoundField DataField="Phone" HeaderText="Phone" SortExpression="Phone" /> 
<asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" /> 
<asp:BoundField DataField="Source" HeaderText="Source" SortExpression="Source" /> 
<asp:BoundField DataField="Message" HeaderText="Message" SortExpression="Message" /> 
<asp:BoundField DataField="Date" HeaderText="Date" DataFormatString="{0:dd/MM/yyyy}" SortExpression ="Date" /> 

答えて

2

よりGridViewのように読むようLableコントロールとLinkBut​​tonコントロールをItemTemplateに追加:

<asp:TemplateField> 
    <ItemTemplate> 
    <asp:Label ID="Label20" runat="server" Text='<%#((string)Eval("ColumnName")).Length<20?Eval("ColumnName"):((string)Eval("ColumnName")).Substring(0,20)+"..." %>' ToolTip='<%#Eval("question") %>' Width="100"></asp:Label> 
    <asp:LinkButton ID="LinkButton1" runat="server" Visible='<%#SetVisibility(Eval("ColumnName"),20) %>' OnClick="LinkButton1_Click">Read More...</asp:LinkButton> 
    </ItemTemplate> 
</asp:TemplateField> 

ここLableテキストは、それが唯一の20文字が含まれていますし、リンクボタンは、もっとしかしLableツールチップを読むことのすべての文字が含まれて表示されますカラム。リンクボタンをクリックするとイベントが発生し、そのラベルのすべてのデータが表示されます。

protected void LinkButton1_Click(object sender, EventArgs e) 
     { 
      //Read More Link Button from Gridview on Click 
      LinkButton lb = (LinkButton)sender; 
      GridViewRow row = lb.NamingContainer as GridViewRow; 
      //Finding the description Text Lable 
      Label qst = row.FindControl("Label20") as Label; 
      // Setting Link Button Text 
      lb.Text = (lb.Text == "Read More...") ? "Hide..." : "Read More..."; 
      //Swaping tooltip value to text and vices versa as Tooltip has all charecters 
      string temp = qst.Text; 
      qst.Text = qst.ToolTip; 
      qst.ToolTip = temp; 
     } 
protected bool SetVisibility(object Desc, int length) 
     { 
      return Desc.ToString().Length > length; 
     } 

ご希望の解決策が見つかると幸いです。

更新:

あなたのコラムは、あなたがnullかどうかを確認してから変換することができ、これを処理するために、null値を持っているようだ:

<asp:TemplateField> 
     <ItemTemplate> 
     <asp:Label ID="Label20" runat="server" Text='<%#Eval("ColumnName")==DBNull.Value ? string.Empty :(((string)Eval("ColumnName")).Length<20?Eval("ColumnName"):((string)Eval("ColumnName")).Substring(0,20)+"...") %>' ToolTip='<%#Eval("question") %>' Width="100"></asp:Label> 
     <asp:LinkButton ID="LinkButton1" runat="server" Visible='<%# Eval("ColumnName")==DBNull.Value ? false :SetVisibility(Eval("ColumnName"),20) %>' OnClick="LinkButton1_Click">Read More...</asp:LinkButton> 
     </ItemTemplate> 
    </asp:TemplateField> 
+0

アドバイスしたとおりにItemTemplateを追加してからaspx.csコードを使用しましたが、ページが正しく読み込まれません。エラーメッセージが表示されます。「System.String」という型の 'System.DBNull'型のオブジェクトをキャストすることができません。長さ<20?Eval( "Message")コード: 行110:(%)を返します。 – Anoj

+0

@anojあなたのDB列にはNull値があるようですので、これを処理するためにアップデートを追加してみてください。問題があれば、私に知らせてください。 –

+0

私は謝罪しますが、更新されたコードはどこで使用しますか? – Anoj

0

私はItemTemplateにメッセージをLinkBut​​tonコントロールを使用して結合を示唆している:

<asp:TemplateField HeaderText="Message"> 
      <ItemTemplate> 
       <%# Bind("Message") %> - <asp:linkbutton id="btnReadMore" runat="server" causesvalidation="false" commandname="readmore" commandargument="<%# Bind("MessageId") %>" /> 
      </ItemTemplate> 
     </asp:TemplateField> 

リンクボタンのためのロジックは、

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "readmore") 
     { 
      Session["messageid"] = e.CommandArgument.ToString(); 
      Response.Redirect("popuppage.aspx?id=" + Session["messageid"].ToString() + ""); 
     } 
    } 
をポップアップすることができ、次のように 私のGridViewの列があります

popuppage.aspxには、クエリ文字列からmessageidを使って完全なメッセージを取得するロジックがあります。

+0

私もGridViewコントロールにハイパーリンクをバインドすることはできません列 "メッセージ"。私は、 "テンプレート内のコントロールのプロパティにバインドの呼び出しを割り当てる必要があります"というエラーが表示されます。あなたは助けてもらえますか? – Anoj

関連する問題