2016-04-18 7 views
1

Ich habe eine Gridview, die Beschreibung Text aus der Datenbank abruft und sobald es über einige Textgrenze ist, möchte ich die Gridview Benutzer lassen klicken Sie auf "Lesen Sie mehr" aus, wo sie voll zu sehen Text, ohne zu einer neuen URL navigieren zu müssen. Vielen Dank im Voraus. Meine Gridview Spalten sind wie folgt:Add Lesen Sie mehr Schaltfläche zum Anzeigen von Gridview Beschreibung Text

<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" /> 

Antwort

2

hinzufügen ItemTemplate mit einer Lable Steuerung und Linkbutton als mehr in Gridview Wie lauten:

<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> 

Hier Lable Text nur 20 Zeichen und Link-Button enthält zeigen Lesen Sie weiter, aber Lable Tooltip enthält alle Zeichen, dass Säule. Klicken Sie auf Link-Schaltfläche klicken Sie auf ein Ereignis, um alle Daten in diesem Label anzuzeigen.

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; 
     } 

Ich hoffe, dies wird Ihnen helfen, Ihre Lösung zu finden.

Updates:

Es scheint, Ihre Spalte Nullwert zu handhaben hat sie null überprüfen und dann konvertieren:

<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

Ich habe das ItemTemplate wie von Ihnen empfohlen hinzugefügt und dann den aspx.cs-Code verwendet, aber es lädt die Seite nicht korrekt. Ich erhalte eine Fehlermeldung: Das Objekt des Typs 'System.DBNull' kann nicht in den Typ 'System.String' umgewandelt werden. und es markiert den Code Zeile 110: Anoj

+0

@anoj scheint, Sie haben Null-Werte in Ihrer DB-Spalte, so dass ich ein Update hinzugefügt habe, bitte versuchen Sie es. Wenn irgendein Problem, informieren Sie mich. –

+0

Ich entschuldige mich, aber wo verwende ich den aktualisierten Code? – Anoj

0

Ich würde vorschlagen, eine Linkbutton und verbindlich die Nachricht in den ItemTemplate mit:

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

Die Logik für die Link-Taste kann dann Popup ein

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() + ""); 
     } 
    } 

In der popuppage.aspx wird Logik sein, um die vollständige Nachricht mithilfe der MessageID aus der Abfragezeichenfolge abzurufen.

+0

kann ich nicht einmal binden den Hyperlink zu der gridview Spalte "Nachricht". Ich erhalte den Fehler "Ein Aufruf zum Binden muss einer Eigenschaft der Steuerung in der Vorlage zugewiesen werden". Können Sie bitte helfen? – Anoj

Verwandte Themen