Hejs! Man kan inte gör på det sättet, wr = row kopierar inte innehållet i row till wr utan pekar istället wr mot instansen row. När du sedan försöker lägga till row i din datatable protesterar den efter som row redan tillhör ett annat datatable. Jag känner inte till något annat sätt än att kopiera kolumn för kolumn, såhär alltså: oavsett om man kan tilldela en rad på det viset eller inte så skulle du tilldela den nya tabellen den rad du vill ha lika många gånger som du har antal kolumner med den kod du har skrivet - och det känns ju inte så logiskt! Njae, jag skapar faktiskt bara en rad i det nya dataSetet för varje "intressant" rad i det gamla, även om det kanske inte ser ut så. If satsen triggar bara då det reguljära uttrycket matchar en viss text i en av kolumnerna, endast då skapas en ny rad. Jag gör detta eftersom jag inte är intresserad av alla rader i det xml-laddade dataSetet. Hade jag endast velat kopiera alla kolumner skulle det förmodligen funka med DataSet.Tables[x].ImportRow(rad); Hej jag förstår inte vad du vill göra men jag får uppfatningen av att du vill kopiera rader från ett dataTable till ett annat dataTable. Du skriver att du vill lägga till rader till ett dataSet men ett dataSet inhåller dataTables och inte dataRows.. Det är väl DataTables som inhåller DataRows? hmm. har hittat något om Strongly Typed DataSet och att de kanske kan genereras från ett xml-schema på något sätt, men efter 12 timmars kämpnde är inte min hjärna riktigt i form att förstå, någon som kan förklara på ca en 3-årings nivå? ;) Jo, det stämmer att det är DataTables, som finns i DataSet, som innehålller DataRows.lägga till rad i en tabell i ett dataSet
Har problem med att lägga till en rad i ett DataSet
DataSet dsdb i koden nedan skapas och laddas med ett xml schema
DataRow wr; //deklarerar DataRow
foreach ( DataRow row in dsx.Tables[2].Rows) //itererar genom ett DataSet med data från xml-fil
{
foreach ( DataColumn col in dsx.Tables[2].Columns)
{
if (regx.IsMatch(row.ItemArray[col.Ordinal].ToString())) //om reguljära uttrycket matchar
{
wr = dsdb.Tables[0].NewRow(); //så vill jag skapa en ny rad i tomma datasetet
wr = row; //och kopiera det som finns i raden, så långt allt väl verkar det som
dsdb.Tables[0].Rows.Add(wr); //här går det fel!! "This row already belongs to another table"
}
}
}
Jag har lite svårt att hålla med om att raden wr tillhör en annan tabell... vart har jag gjort galet.
Försökte följa ett exempel jag hittade på nätet och tycker det liknar det jag gör:
http://www.c-sharpcorner.com/Code/2004/Feb/DataSetsOverview03.asp
DataRow workRow;
for (int i = 0; i <= 9; i++)
{
workRow = currentTable.NewRow();
workRow[0] = i;
workRow[1] = "CustName" + i.ToString();
currentTable.Rows.Add(workRow);
}
Plz, vad är det jag inte ser/gör/förstår??
/tobbeSv: lägga till rad i en tabell i ett dataSet
wr["col1"] = row["col1"];
wr["col2"] = row["col2"];
eller
wr[0] = row[0];
wr[1] = row[1];
eller om du loopar igenom alla columner i datatablen.
/JohanSv: lägga till rad i en tabell i ett dataSet
Men jag instämmer med föregående talare, tror inte heller du kan kopiera det på radnivå, du får loopa på kolumnnivå - vilket du iofs redan gör, men du får ändra koden i loopen en aning. Skapa en ny rad, lägga till allt i den som fanns på den gamla etc.
/EmmaSv:lägga till rad i en tabell i ett dataSet
Jag har nu försökt att använda tekniken med att ta ett värde i taget. Tog många timmar innan jag förstod varför ingen data verkade föras över, fast jag inte fick några kompilerings eller runtime fel.
Till slut upptäckte jag att mitt gamlaDataSet, med data laddad från en xml-fil, inte hade samma typ på sina rows.ItemArray[x], som de nya raderna jag skapade
dvs
Debug.WriteLine(wr.ItemArray[0].GetType()); //wr = nyskapad rad
Skriver ut: System.DBNull
Medan
Debug.WriteLine(row.ItemArray[0].GetType()); //row = rad från xml-laddat DataSet
Skriver ut: System.String
Det nya DataSetet läser in ett xml-schema för att få rätt struktur ifall jag inte nämnde det förut.
Antar att de olika typerna gör att jag inte får det att funka men... hur tusan får jag de att stämma överrens?Sv: lägga till rad i en tabell i ett dataSet
Men om du vill kopiera dataRader från en dataTable till ett annat kan du pröva den här metoden..
public void copyTableData(DataTable fromTable, DataTable toTable)
{
int i=0;
foreach (DataRow rItem in fromTable.Rows)//kopierar data rad för rad mellan tabellerna
{
toTable.Rows[i].ItemArray = rItem.ItemArray;
i++;
}
}
Men det finns redan en CopyMetod för dataTables men den kopierar även strukturen för dataTable:n och den kanske man inte vill ha på köpet..
/JLSv: lägga till rad i en tabell i ett dataSet
Sv:lägga till rad i en tabell i ett dataSet
Det du föreslår funkar nog om man vill ha alla kolumner från fromTable och kopiera dem till toTable, jag vill dock bara ha vissa kolumner, och vissa rader oxå. Problemet som jag förstår det är dock de olika typerna jag får på mina dataSet.Tables[].Rows...