2013-08-30 38 views
6

Ich habe mehr als einen Tag nach einer Möglichkeit gesucht, eine verschachtelte Gridview zu erstellen, die einem C# -Fenster hinzugefügt werden kann. Ich habe viele Beispiele gefunden, die ASP.NET verwenden, aber ich konnte keine finden, die mit C# getan werden. Ich würde eine Master/Detail-Gridview, dass Sie in den folgenden Link wie das aussieht: http://ilovedeveloper.blogspot.com/2009/05/nested-gridview-using-c.htmlEin verschachteltes Gridview-Beispiel

+0

[ExtGridView] (http://www.codeproject.com/Articles/12299/ExtGridView) kann von Interesse sein, ich habe es nicht verwendet, aber ich glaube, es ist in C#. –

+0

Was ich eigentlich bin, ist ein Master/Detail GridView rein in C# zu erstellen. Ich möchte dieses Steuerelement in einer Windows-Form verwenden. – mrida

Antwort

0

können Sie die Vorlage Spalte verwenden, um verschachtelte Gridview zu erstellen, müssen Sie HTML-Tabelle in der Vorlage Spalte in der ersten Reihe der Spalte bauen wird mit den Hauptrasterzeilen gefüllt, wobei eine benutzerdefinierte Bindung verwendet wird, die das datengebundene Ereignis row verwendet. Sie beschlagen Nest Rasteransicht in der zweiten Reihe der HTML-Tabelle

Prüfung mit folgendem Link .. http://www.dotnetfox.com/articles/multilevel-nested-gridview-in-Asp-Net-using-C-Sharp-1012.aspx

12

IMAGE

Your requirement

ASPX-

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CS.aspx.cs" Inherits="CS" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <style type="text/css"> 
     body 
     { 
      font-family: Arial; 
      font-size: 10pt; 
     } 
     .Grid td 
     { 
      background-color: #A1DCF2; 
      color: black; 
      font-size: 10pt; 
      line-height:200% 
     } 
     .Grid th 
     { 
      background-color: #3AC0F2; 
      color: White; 
      font-size: 10pt; 
      line-height:200% 
     } 
     .ChildGrid td 
     { 
      background-color: #eee !important; 
      color: black; 
      font-size: 10pt; 
      line-height:200% 
     } 
     .ChildGrid th 
     { 
      background-color: #6C6C6C !important; 
      color: White; 
      font-size: 10pt; 
      line-height:200% 
     } 
    </style> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script type="text/javascript"> 
    $("[src*=plus]").live("click", function() { 
     $(this).closest("tr").after("<tr><td></td><td colspan = '999'>" + $(this).next().html() + "</td></tr>") 
     $(this).attr("src", "images/minus.png"); 
    }); 
    $("[src*=minus]").live("click", function() { 
     $(this).attr("src", "images/plus.png"); 
     $(this).closest("tr").next().remove(); 
    }); 
</script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:GridView ID="gvCustomers" runat="server" AutoGenerateColumns="false" CssClass="Grid" 
     DataKeyNames="CustomerID" OnRowDataBound="OnRowDataBound"> 
     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <img alt = "" style="cursor: pointer" src="images/plus.png" /> 
        <asp:Panel ID="pnlOrders" runat="server" Style="display: none"> 
         <asp:GridView ID="gvOrders" runat="server" AutoGenerateColumns="false" CssClass = "ChildGrid"> 
          <Columns> 
           <asp:BoundField ItemStyle-Width="150px" DataField="OrderId" HeaderText="Order Id" /> 
           <asp:BoundField ItemStyle-Width="150px" DataField="OrderDate" HeaderText="Date" /> 
          </Columns> 
         </asp:GridView> 
        </asp:Panel> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField ItemStyle-Width="150px" DataField="ContactName" HeaderText="Contact Name" /> 
      <asp:BoundField ItemStyle-Width="150px" DataField="City" HeaderText="City" /> 
     </Columns> 
    </asp:GridView> 
    </form> 
</body> 
</html> 

C#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 

public partial class CS : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      gvCustomers.DataSource = GetData("select top 10 * from Customers"); 
      gvCustomers.DataBind(); 
     } 
    } 

    private static DataTable GetData(string query) 
    { 
     string strConnString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(strConnString)) 
     { 
      using (SqlCommand cmd = new SqlCommand()) 
      { 
       cmd.CommandText = query; 
       using (SqlDataAdapter sda = new SqlDataAdapter()) 
       { 
        cmd.Connection = con; 
        sda.SelectCommand = cmd; 
        using (DataSet ds = new DataSet()) 
        { 
         DataTable dt = new DataTable(); 
         sda.Fill(dt); 
         return dt; 
        } 
       } 
      } 
     } 
    } 

    protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      string customerId = gvCustomers.DataKeys[e.Row.RowIndex].Value.ToString(); 
      GridView gvOrders = e.Row.FindControl("gvOrders") as GridView; 
      gvOrders.DataSource = GetData(string.Format("select top 3 * from Orders where CustomerId='{0}'", customerId)); 
      gvOrders.DataBind(); 
     } 
    } 
} 
+0

warum downvotes .. – Sasidharan

+0

Arbeitete für mich, also hast du meine upvote. – BryPie

+3

LOL Sasidharan! Ich nehme an, Sie bekommen Downvotes, weil Sie die Frage des OP nicht sehr sorgfältig lesen. OP hat klar gesagt, dass OP speziell für WindowsForm Grid und nicht ASP.Net! hoffe das beantwortet deine frage. – Vincy

0
SqlConnection con = new SqlConnection("Data Source=SureshDasari;Integrated Security=true;Initial Catalog=MySampleDB"); 

protected void Page_Load(object sender, EventArgs e) 
{ 
if (!IsPostBack) 
{ 
BindGridview(); 
} 
} 
// This method is used to bind gridview from database 
protected void BindGridview() 
{ 
con.Open(); 
SqlCommand cmd = new SqlCommand("select TOP 4 CountryId,CountryName from Country", con); 
SqlDataAdapter da = new SqlDataAdapter(cmd); 
DataSet ds = new DataSet(); 
da.Fill(ds); 
con.Close(); 
gvParentGrid.DataSource = ds; 
gvParentGrid.DataBind(); 

} 
protected void gvUserInfo_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
if (e.Row.RowType == DataControlRowType.DataRow) 
{ 
con.Open(); 
GridView gv = (GridView)e.Row.FindControl("gvChildGrid"); 
int CountryId = Convert.ToInt32(e.Row.Cells[1].Text); 
SqlCommand cmd = new SqlCommand("select * from State where CountryID=" + CountryId, con); 
SqlDataAdapter da = new SqlDataAdapter(cmd); 
DataSet ds = new DataSet(); 
da.Fill(ds); 
con.Close(); 
gv.DataSource = ds; 
gv.DataBind(); 
} 
} 
+0

Bitte geben Sie keine reinen Code-Antworten ein. Bitte fügen Sie eine Erklärung zu Ihrer Antwort hinzu. Ohne eine Erklärung ist es unklar, ob Ihr Beitrag eine Antwort sein sollte oder nicht. – honk