2016-11-30 5 views
0

Ich habe 3 Aufgaben:Warum GRIDVIEW-Datensätze zweimal in einer einzelnen Gridview angezeigt werden?

  1. Aufzeichnungen sollten nicht so zeigen, wie dieses Bild wiederholen. output
  2. Wenn ich auf die Schaltfläche klicken, Es hat die gesamte Zeile Datensätze und den Index dieser bestimmten Zeile zu holen
  3. Nachdem auf diese Schaltfläche klicken, ich habe einige Datensätze in der nächsten Zeile einzufügen, wo Benutzer auf die Schaltfläche klicken.

Zum Beispiel: Insgesamt 10 Zeilen Datensätze ist in Gridview. Wenn der Benutzer auf die Schaltfläche für die zweite Zeile klickt, muss er die gesamten Zeilendetails und den Indexwert der Zeile abrufen und anschließend fünf fünf Datensätze aus der dritten Zeile einfügen.

Dies ist mein Code: Sample.aspx

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"></asp:GridView> 

Sample.aspx.cs

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!this.IsPostBack) 
     { 
      BoundField bfield = new BoundField(); 
      bfield.HeaderText = "Name"; 
      bfield.DataField = "Name"; 
      GridView1.Columns.Add(bfield); 

      TemplateField tfield = new TemplateField(); 
      tfield.HeaderText = "Country"; 
      GridView1.Columns.Add(tfield); 

      tfield = new TemplateField(); 
      tfield.HeaderText = "Id"; 
      GridView1.Columns.Add(tfield); 
      //BindGrid(); 
     } 
     this.BindGrid(); 
    } 

private void BindGrid() 
    { 
     DataTable dt = new DataTable(); 
     dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)), 
        new DataColumn("Name", typeof(string)), 
        new DataColumn("Country",typeof(string)) }); 
     dt.Rows.Add(1, "John Hammond", "United States"); 
     dt.Rows.Add(2, "Mudassar Khan", "India"); 
     dt.Rows.Add(3, "Suzanne Mathews", "France"); 
     dt.Rows.Add(4, "Robert Schidner", "Russia"); 
     GridView1.DataSource = dt; 
     GridView1.DataBind(); 
    } 

    protected void btnRefresh_Click(object sender, EventArgs e) 
    { 

    } 

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      TextBox txtCountry = new TextBox(); 
      txtCountry.ID = "txtCountry"; 
      txtCountry.Text = (e.Row.DataItem as DataRowView).Row["Country"].ToString(); 
      e.Row.Cells[1].Controls.Add(txtCountry); 

      Button lnkView = new Button(); 
      lnkView.ID = "lnkView"; 
      lnkView.Text = (e.Row.DataItem as DataRowView).Row["Id"].ToString(); 
      lnkView.Click += ViewDetails; 
      lnkView.CommandArgument = (e.Row.DataItem as DataRowView).Row["Id"].ToString(); 
      e.Row.Cells[2].Controls.Add(lnkView); 
     } 
    } 

    protected void ViewDetails(object sender, EventArgs e) 
    { 
     Button lnkView = (sender as Button); 
     GridViewRow row = (lnkView.NamingContainer as GridViewRow); 
     string id = lnkView.CommandArgument; 
     string name = row.Cells[0].Text; 
     string country = (row.FindControl("txtCountry") as TextBox).Text; 
     ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Id: " + id + " Name: " + name + " Country: " + country + "')", true); 
    } 

Das Wichtigste ist: Ich Index dieser Zeile erhalten soll, und die Datensätze einfügen zwischen zwei Datensätze.

+0

Konnten Sie Ihr Problem lösen? –

Antwort

0

Für Ihre doppelten Datensatz Bedenken: Es gibt eine Eigenschaft auf GridView Kontrollen namens AutoGenerateColumns. Die Standardeinstellung lautet true.

Wenn dies zutrifft, werden alle Spalten/Felder/Eigenschaften in der Datenquelle automatisch als Spalten in den Ergebnissen angezeigt. Wenn Sie dann Spalten hinzufügen, werden diese Spalten zusätzlich zu (und nach) den automatisch erzeugten Spalten angezeigt.

Dies ist einfach zu beheben: die zu falseAutoGenerateColumns Eigenschaft ändern:

<asp:GridView ID="GridView1" runat="server" 
    OnRowDataBound="GridView1_RowDataBound"  
    AutoGenerateColumns="false"></asp:GridView> 

Wenn andere Probleme auftreten, eine separate Frage für diejenigen fragen.

Verwandte Themen