Laden...

TextBox in GridView abfüllen

Erstellt von Gurrnder vor 16 Jahren Letzter Beitrag vor 16 Jahren 6.681 Views
G
Gurrnder Themenstarter:in
142 Beiträge seit 2007
vor 16 Jahren
TextBox in GridView abfüllen

Hallo.

Ich arbeite mir ASP.NET und einer SQL-DB un dem MSVS.

Ich habe ein GridView-Control auf der Website sowie ein Textfeld und ein Button.

Wenn ich nun auf den Button Klicke soll der Inhalt der TextBox auf dem GridView angezeigt werden .
Wenn man den Button mehrmals betätigt soll bei jedem Klick eine neue Linie der GridView hinzu gefügt werden.

Ich habe nun schon viel gegoogelt aber irgendwie bleibe ich immer an der Stelle hängen wo ich den Inhalt der TextBox auslesen muss.

Ich wäre sehr dankbar über ein kleines Beispiel.

mfg
Gurrnder

K
95 Beiträge seit 2007
vor 16 Jahren

Hallo,

es gibt mehre Möglichkeiten. Die einfachste wäre folgende:

Du machst dir ein Datatable, welches nur eine Spalte hat und fügst diesem - immer wenn der Button gedrückt wird - eine neue Zeile hinzu. Danach bindest du das DataTable einfach an das Gridview.

Manuell könntest du auch die Zeile direkt am Gridview hinzufügen, ist aber unsauberer.

Wozu versuchst du so etwas, nur zum Üben oder für einen bestimmten Zweck?

G
Gurrnder Themenstarter:in
142 Beiträge seit 2007
vor 16 Jahren

Hallo ...

Dann werde ich mir gleich die DateTable anschauen.

Ja ich mache das zu einem Bestimmten Zweck.

Und zwar kann der User mehrere Daten (Datum) angeben (durch die TextBox) welche ihm dann gleich angezeigt werden sollen.

Später sollen sie dann in die DB geschrieben werden. Das sofortige in die DB schreiben ist zum jetztigen Zeitpunkt nicht möglich.

Diese DataTable kann ich auch nicht so einfach befüllen ... erstellen mit nur einer Spalte ist kein Problem aber den Inhalt der TB abfülllen daran scheiterts.

D
280 Beiträge seit 2005
vor 16 Jahren

Hallo,

dies sollte dir eigentlich weiterhelfen. Mit jedem OnClick des Buttons wird eine Row erzeugt und diese dem DataTable hinzugefügt.

Dennie Schmögner
Dipl. Ing. Informatik / Fachrichtung Automatisierungstechnik
Microsoft Business Intelligence 2005
SharePoint Portal Server 2007

G
Gurrnder Themenstarter:in
142 Beiträge seit 2007
vor 16 Jahren
    protected void Button1_Click(object sender, EventArgs e)
    {  
        DataTable dt = new DataTable();
        
        DataRow dr = dt.NewRow();
        dr.Table.Columns.Add("Datum");

        dr["Datum"] = TextBox3.Text.Trim();

        dt.Rows.Add(dr);

        foreach (GridViewRow row in GridView1.Rows)
        {
            dt.Rows.Add(row);
        }

        GridView1.DataSource = dt;
        GridView1.DataBind();        
    }

Das habe ich mir zusammen gebastelt ... wenn ich da ein paar mal auf den Knopf drücke schaut das dann so aus:

    Datum  
23.9.2007  
System.Web.UI.WebControls.GridViewRow  
System.Web.UI.WebControls.GridViewRow  

Also die erste Zeile stimmt und die übrigen sind komisch.

D
280 Beiträge seit 2005
vor 16 Jahren

Hallo Gurrnder

evtl. liegt es am PostBack oder am ViewState der Controls. Normalerweise wird mit jedem Klick auf deinen Button ein PostBack ausgelöst und die Controls verlieren ihre Werte.

Gruß
dschmoegner

Dennie Schmögner
Dipl. Ing. Informatik / Fachrichtung Automatisierungstechnik
Microsoft Business Intelligence 2005
SharePoint Portal Server 2007

G
Gurrnder Themenstarter:in
142 Beiträge seit 2007
vor 16 Jahren

Also funktionieren tut das nun:


protected void Button1_Click(object sender, EventArgs e)
    {
        DataTable dt;
        if(Session["tableDatum"] == null){
            dt = new DataTable();
            dt.Columns.Add("Datum");
        }
        else
        {
            dt = (DataTable)Session["tableDatum"];
        }
        
        DataRow dr = dt.NewRow();
        dr["Datum"] = TextBox3.Text.Trim();
        dt.Rows.Add(dr);

        GridView1.DataSource = dt;
        GridView1.DataBind();

        Session.Add("tableDatum", dt);
    }

    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        try
        {
            GridView1.DeleteRow(e.RowIndex);
        }
        catch (System.StackOverflowException soe) { }
    }

Nur die StackOverflowExeption macht ärger.

D
280 Beiträge seit 2005
vor 16 Jahren

Hallo Gurrnder,

mir fällt jetzt auf Anhieb keine Grund für eine StackOverflowException ein. Wenn du eine Row löscht dann vernichtest du doch eher Werte als den Stack mit Werten zu befüllen. Schau doch mal in der MSDN Doku ob DeleteRow() überhaupt eine Exception wirft, die du abfangen kannst.

Gruß
dschmoegner

Dennie Schmögner
Dipl. Ing. Informatik / Fachrichtung Automatisierungstechnik
Microsoft Business Intelligence 2005
SharePoint Portal Server 2007

G
Gurrnder Themenstarter:in
142 Beiträge seit 2007
vor 16 Jahren

Hi

Hab ich gemacht. Ich finde zum einten keinen Hinweis darauf, dass überhaupt eine Exeption geworfen wird und zum andern haben die Beispiele überhaupt nichts mit GridView.DeleteRow() zu tun.

http://msdn2.microsoft.com/de-de/library/system.web.ui.webcontrols.gridview.deleterow(VS.80).aspx

Auf alle Fälle wird da eine Exeprion geworfen welche ich nicht mit Try/Catch abfangen kann.

K
95 Beiträge seit 2007
vor 16 Jahren

Was hast du vor? Bestimmte Zeilen aus dem Gridview löschen?

D
280 Beiträge seit 2005
vor 16 Jahren

Vor allem wie lautet die ErrorMessage der Exception?

Dennie Schmögner
Dipl. Ing. Informatik / Fachrichtung Automatisierungstechnik
Microsoft Business Intelligence 2005
SharePoint Portal Server 2007

G
Gurrnder Themenstarter:in
142 Beiträge seit 2007
vor 16 Jahren

Ich denke ich weis nun was los ist. Zumindest denke ich das.$
Also ich habe eine GridView welche mir 2 Spalten hat. Eine für die Daten und die andere für den Delete Button.
Bei Klick auf den Delete button soll die Entsprechende Zeile gelöscht werden.

Hinzugefügt habe ich den Deletebutton über den GUI designer. Edit Columns --> Command Field.

Ich habe das gefühl das die Methode DeleteRows() nicht aufgerufen wird ... allerdings springt es in die Deleting und Deleted events.

Die exeption ist Folgende:

System.StackOverflowException was unhandled

An unhandled exception of type 'System.StackOverflowException' occurred in System.Web.dll

Und das ist wirklich schon alles. Ich blick da nicht so recht durch ... finde auch den Methodenaufruf nicht...

AH so... Die Exeption tritt auf weil ich die Methode DeleteRow() im Deleting-Event aufrufe. Denn die Methode DeleteRow() ruft auch immer noch diesen Event auf ...

Aber warum es nicht löscht kapier ich nicht.

D
280 Beiträge seit 2005
vor 16 Jahren

Schau doch mal ob die entsprechenden Zeilen auch im DataSet gelöscht werden. Wenn nicht ist es kein Wunder, dass nach dem neuen Seitenaufbau die alten Werte noch drin stehen.

Dennie Schmögner
Dipl. Ing. Informatik / Fachrichtung Automatisierungstechnik
Microsoft Business Intelligence 2005
SharePoint Portal Server 2007

G
Gurrnder Themenstarter:in
142 Beiträge seit 2007
vor 16 Jahren

Ich habe nun von der Methode DeleteRow() abstand genommen ... das ding ist Bugged.

Gelöst habe ich es so:

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        DataTable dt = (DataTable)Session["tableDatum"];
        dt.Rows.RemoveAt(e.RowIndex);
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

Gut möglich das die Methode DeleteRow() immernoch von GridView aufgerufen wird ... aber so gehts.

D
280 Beiträge seit 2005
vor 16 Jahren

Kleiner Hinweis zum Ende.

Mithilfe der DeleteRow-Methode können Sie den Datensatz am angegebenen Index programmgesteuert aus der Datenquelle löschen. Diese Methode wird in der Regel verwendet, wenn ein Datensatz von außerhalb des GridView-Steuerelements gelöscht werden muss, z. B. von einem anderen Steuerelement auf der Seite. Der Aufruf dieser Methode löst außerdem das RowDeleted-Ereignis und das RowDeleting-Ereignis aus.

Der letzte Satz aus dem MSDN Auszug macht deutlich warum du eine StackOverflowException bekommen hast.

Ich nehme an du hast es so ähnlich versucht:

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        GridView.DeleteRow(e.RowIndex);
    } 

DeleteRow() löst eben das RowDeleting und das RowDeleted Event aus. Wenn du in den EventMethoden dann DeleteRow() aufrufst erzeugt du eine Schleife die irgendwann zum StackOverflow führen muss, wenn man keine Abbrechbedinung definiert ist.

Dennie Schmögner
Dipl. Ing. Informatik / Fachrichtung Automatisierungstechnik
Microsoft Business Intelligence 2005
SharePoint Portal Server 2007

G
Gurrnder Themenstarter:in
142 Beiträge seit 2007
vor 16 Jahren

Jop. Hab ich 3 posts weiter oben rausbekommen.