Solved

Updating a row in a DataSet

Posted on 2008-06-24
2
654 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
  • 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

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

For those of you who don't follow the news, or just happen to live under rocks, Microsoft Research released a beta SDK (http://www.microsoft.com/en-us/download/details.aspx?id=27876) for the Xbox 360 Kinect. If you don't know what a Kinect is (http:…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

762 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

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now