Announcement

Collapse
No announcement yet.

Problem mit DataRow sobald ich ein select mache...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit DataRow sobald ich ein select mache...

    sorry, habe zu spät bemerkt, dass der Titel des Threads nicht passt.... :-(

    irgendwie stimmt da was nicht. Ich erstelle einen Select, sobald ich die Daten als parameter weitergeben will, gehts nicht.

    Dataset besteht aus mehreren Zeilen und Spalten. Gesucht wird die erste Spalte "TaskID" nach best. IDs (siehe code)! Sobald ich "TaskTable(rows)" ausführe, erhalte folgende fehlermeldung:
    CS1502: Die beste Übereinstimmung für die überladene Methode ExamTaskManagement_PrintTaskList.TaskTable(System. Data.DataSet) hat einige ungültige Argumente.


    So möchte ich es lösen:
    Code:
    UserName = Common.GetUserName(Convert.ToInt32(Session["UserID"]));
    DataSet TaskDS;
    TaskDS = (DataSet)Session["TaskDS"];
    DataTable tbl = TaskDS.Tables[0];
    
    //filter
    expression = "TaskID = '5'";   //testhalber möchte ich diese Zeilendaten anzeigen
    DataRow[] rows = tbl.Select(expression);
    TaskTable(rows);
    
    
    public void TaskTable(DataSet TaskDS1)
        {
           for (int i = 0; i < TaskDS1.Tables[0].Rows.Count; i++)
           {
               ....hier übergebe ich die Zeile zum label!!!
           }
    }
    was mache ich falsch!! select funktioniert

  • #2
    Komisch, bei myCSharp.de hast du inzwischen gelernt, dass die Arbeit zu DataTable nach "Datentechnologien" gehört. Hier heißt das Unterforum ADO.NET, aber inhaltlich gilt das gleiche.

    Aber der Fehler ist grundsätzlicher Art. Der Aufruf der TaskTable-Methode verlangt ein DataSet als Argument, du lieferst aber ein DataRow-Array. Die Fehlermeldung ist auch insofern ziemlich eindeutig: "... hat einige ungültige Argumente". Lediglich die Formulierung "Die beste Übereinstimmung..." verwirrt, weil es vermutlich keine Überladungen gibt.

    Lösung: TaskTable benötigt eine Deklaration mit einem DataRow-Array.

    Jürgen

    Comment


    • #3
      hey, stimmt... da muss ich mich noch bessern! :-o

      Ok, habe deine erklärung verstanden! Habe es auch versucht mit der deklaration mi DataRow. Geht leider auch nicht...

      Nun heisst es:
      Die beste Übereinstimmung für die überladene Methode ExamTaskManagement_PrintTaskList.TaskTable(System. Data.DataRow) hat einige ungültige Argumente.
      Zuletzt editiert von mavebox; 23.04.2009, 14:04.

      Comment


      • #4
        Es gibt ja auch einen Unterschied zwischen DataRow und DataRow-Array. Jürgen

        Comment


        • #5
          stimmt... doofer fehler!

          leider bin ich mit dataset noch nicht soweit wie ich möchte und versuche nun folgendes problem zu lösen:

          Bis jetzt hat es so funktioniert, dass der gesamte Inhalt des Datasets durch Methodenaufruf "public void TaskTable(Dataset TaskDS)" übergeben wurde.
          siehe code:
          Code:
          TaskStr = TaskStr + "<table width='100%' border='0'>";
          TaskStr = TaskStr + "<tr><td width=\\'10%\\'><b>" + strResource483 + "</b></td><td width=\\'10%\\'><b>" + strResource682 + "</b></td><td width=\\'20%\\'><b>" + strResource346 + "</b></td><td width=\\'30%\\'><b>" + strResource44 + "</b></td><td width=\\'10%\\'><b>" + strResource420 + "</b></td><td width=\\'10%\\'><b>" + strResource355 + "</b></td><td width=\\'10%\\'><b>" + strResource356 + "</b></td></tr>";
          
          for (int i = 0; i < TaskDS1.Tables[0].Rows.Count; i++)
                  {
                     TaskStr = TaskStr + "<tr><td>" + TaskDS1.Tables[0].Rows[i][0] + "</td><td>" + TaskDS1.Tables[0].Rows[i][1] + "</td><td>" + TaskDS1.Tables[0].Rows[i][4] + "</td><td>" + TaskDS1.Tables[0].Rows[i][2] + "</td><td>" + TaskDS1.Tables[0].Rows[i][5] + "</td><td>" + TaskDS1.Tables[0].Rows[i][6] + "</td><td>" + TaskDS1.Tables[0].Rows[i][7] + "</td></tr>";
                    }
          TaskStr = TaskStr + "</table>";
          }
          Nun, dass einfachste ist, die bestehende Methode stehen zu lassen und aus diesem Grund rufe ich eine neue und zwar so:
          Code:
           public void TaskTableDR (DataRow[] TaskDS1)
          {
          
          }
          Wie zeige ich am einfachsten den inhalt des DataRow Arrays an??

          Comment


          • #6
            Nun, ich bin jetzt soweit gekommen:
            Code:
            {
                        string expression;
                        char[] separator = new char[] {','};
                        string[] strFilteredID = strTaskList.Split(separator);          
                        DataTable DataTableTasks = TaskDS.Tables[0];
                        DataTable DataTableTasksClone = DataTableTasks.Clone();
                        DataTableTasksClone.Clear();
            
                        //filter
                        for (int i = 0; i < strFilteredID.Length; i++)
                        {
                            expression = "TaskID ="+ strFilteredID[i];
                            DataRow[] rows = DataTableTasks.Select(expression);
            
                            DataTableTasksClone.ImportRow(rows);
                            DataTableTasksClone.AcceptChanges();
                        }
            Bei "DataTableTasksClone.ImportRow(rows);" bleibt es stehen und erhalte folgende Fehlermeldungen:
            error CS1502: Die beste Übereinstimmung für die überladene Methode System.Data.DataTable.ImportRow(System.Data.DataRo w) hat einige ungültige Argumente.
            error CS1503: Das Argument 1 kann nicht von System.Data.DataRow[] in System.Data.DataRow konvertiert werden.

            Ich sehe aber da kein konflikt!!

            Comment


            • #7
              Originally posted by Jürgen Thomas View Post
              Es gibt ja auch einen Unterschied zwischen DataRow und DataRow-Array. Jürgen
              ImportRow will eine DataRow haben, du steckst ein Array hinein.

              Übrigens: AcceptChanges muss höchstwahrscheinlich weg. Entgegen dem üblichen Sprachgebrauch ist das keine Bestätigung des Anwenders, dass die Änderungen gültig sind, sondern es ist die Mitteilung an das DataSet, dass die Änderungen erledigt sind - bei einem späteren Aufruf z.B. über DbDataAdapter werden diese Änderungen nicht mehr an die Datenbank übertragen.

              Jürgen

              Comment

              Working...
              X