• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 690
  • Last Modified:

Updating a row in a DataSet

Hi
I have 2 DataSets. One, dsComplete, which contains all my data and another, dsSummery, which is empty. Now I want to add rows to dsSummery from dsComplete. In dsComplete "SubjectInComplete"-column has equal values for 3-4 rows, but the other fields in thies rows has other values. I want to make a summery of thies values in dsSummery where "SubjectInComplete" is unique.

Well below is my code so far. I don't get errors, but it's not working as it should - "SubjectInSummery" isn't unique. And also isn't there a better way than using try..catch - I don't fell like is that safe in this case.

Here is what dsComplete could look like...

SubjectInComplete ; Question1 ; Question2
"Math" ; 2 ; 5
"Math" ; 1 ; 3
"Math" ; 4 ; 1
"English" ; 2 ; 1
"English" ; 1 ; 3
"English" ; 2 ; 5
DataSet dsComplete; // Code filling dsComplete not shown here
DataSet dsSummery;
 
String RememberLastOne = "";
 
foreach (DataTable myTable in dsComplete.Tables)
{
	DataView dv = myTable.DefaultView;
	dv.Sort = "SubjectInComplete"; // Sort by this one so that the code can check i current and last row is identical
	
	foreach (DataRow row in myTable.Rows)
	{
		try // Try to edit row
		{
			
			DataRow[] editRow = dsSummery.Tables[0].Select("SubjectInSummery LIKE '%" + RememberLastOne + "%'");
			switch (row["Question1"].ToString())
			{
				case "1": // add value to a field in this row
					editRow[0]["Question1"] = Convert.ToInt32(editRow[0]["Question1"]) + 1;
					break;
				case "2": // add value to a field in this row
					editRow[0]["Question2"] = Convert.ToInt32(editRow[0]["Question2"]) + 1; 
					break;
			}
		}
		catch // If edit failed create new row
		{
			DataRow newRow = dsSummery.Tables[0].NewRow();
			newRow["ID"] = i + 1;
			newRow["SubjectInSummery"] = row["SubjectInComplete"];
			newRow["Question1"] = 0;
			newRow["Question2"] = 0;
			dsSummery.Tables[0].Rows.Add(newRow);
		}
 
		// Remember this row 
		RememberLastOne = row["SubjectInComplete"].ToString();
	}
}

Open in new window

0
Balltown
Asked:
Balltown
  • 2
1 Solution
 
BalltownAuthor Commented:
Okay, think I've got it now. I made "SubjectInSummery" the primary key and searched for it.. Se code.
DataSet dsComplete; // Code filling dsComplete not shown here
DataSet dsSummery;
 
// Make SubjectInSummery the primary key
DataColumn[] PriKeyName = { dsSummery.Tables[0].Columns["SubjectInSummery"] };
dsSummery.Tables[0].PrimaryKey = PriKeyName;
 
int i = 0;
 
foreach (DataRow row in dsComplete.Tables[0].Rows)
{
	// Find primary key
	DataRow editRow = dsSummery.Tables[0].Rows.Find(row["FAG"].ToString());
 
	// if primary key is not null you can edit row
	if (editRow != null) {
                        
		switch (row["Question1"].ToString())
		{
			case "1": // add value to a field in this row
				editRow["Question1"] = Convert.ToInt32(editRow[0]["Question1"]) + 1;
				break;
			case "2": // add value to a field in this row
				editRow["Question2"] = Convert.ToInt32(editRow[0]["Question2"]) + 1; 
				break;
		}
	}
	else
	{
		DataRow newRow = dsSummery.Tables[0].NewRow();
		newRow["ID"] = i + 1;
		newRow["SubjectInSummery"] = row["SubjectInComplete"];
		newRow["Question1"] = 0;
		newRow["Question2"] = 0;
		dsSummery.Tables[0].Rows.Add(newRow);
	}
	i++;
}

Open in new window

0
 
BalltownAuthor Commented:
Woops... the line
DataRow editRow = dsSummery.Tables[0].Rows.Find(row["FAG"].ToString());

Should read
DataRow editRow = dsSummery.Tables[0].Rows.Find(row["SubjectInComplete"].ToString());

"fag" means "subject" in danish ;-)
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now