Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Updating a row in a DataSet

Posted on 2008-06-24
2
Medium Priority
?
679 Views
Last Modified: 2013-12-16
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
Comment
Question by:Balltown
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
2 Comments
 

Accepted Solution

by:
Balltown earned 0 total points
ID: 21854389
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
 

Author Comment

by:Balltown
ID: 21854901
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

 [eBook] Windows Nano Server

Download this FREE eBook and learn all you need to get started with Windows Nano Server, including deployment options, remote management
and troubleshooting tips and tricks

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
Introduction Hi all and welcome to my first article on Experts Exchange. A while ago, someone asked me if i could do some tutorials on object oriented programming. I decided to do them on C#. Now you may ask me, why's that? Well, one of the re…
Sometimes it takes a new vantage point, apart from our everyday security practices, to truly see our Active Directory (AD) vulnerabilities. We get used to implementing the same techniques and checking the same areas for a breach. This pattern can re…
This lesson discusses how to use a Mainform + Subforms in Microsoft Access to find and enter data for payments on orders. The sample data comes from a custom shop that builds and sells movable storage structures that are delivered to your property. …

650 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question