Solved

C# DataView and the 'if' statement???

Posted on 2004-08-28
3
610 Views
Last Modified: 2011-09-20
For some reason the DataView always loads "No Match Found" in colums 2 and 5 of my ListView. It's obviously not findin any matches, however the code complies and the program runs without error.  I'm sure the DataSet (ds) is working correctly and loaded with data. I feel the problem maybe in the 'if' statement. I'm undecided on using 'Count' or 'Equals' like so:

if(dv.Count > 0)   // Match found...................
{
strDest1 = dv[0]["value"].ToString();


Q. What is wrong with my dataview???



*** Full Code Below***

private void Load()
{
DataSet ds = new DataSet();

string SQL1 = "SELECT col_1, col_2 FROM table2";
SqlConnection cn1 = new SqlConnection("integrated security=SSPI;data source=office; persist security info=False;initial catalog=master");
SqlDataAdapter da1 = new SqlDataAdapter(SQL1,cn1);
cn1.Open();
da1.Fill(ds);
cn1.Close();

dt = ds.Tables[0];
                  
string SQL2 = "SELECT col_1, col_2, COUNT(col_2)AS 'count' FROM table1 GROUP BY col_1, col_2 HAVING COUNT (*) >5 ORDER BY count DESC";
SqlConnection cn2 = new SqlConnection("integrated security=SSPI;data source=office; persist security info=False;initial catalog=master");
SqlDataAdapter da2 = new SqlDataAdapter(SQL2,cn2);
cn2.Open();
SqlDataReader SqlReader2 = da2.SelectCommand.ExecuteReader();

listView1.Items.Clear();
listView1.BeginUpdate();
                        
try
{
while(SqlReader2.Read())
{
string str_col_1 = SqlReader2.GetString(0);
string str_col_2 = SqlReader2.GetString(1);
int cnt_count = SqlReader2.GetInt32(2);                  

DataView dv = new DataView(ds.Tables["table2"]);
dv = dt.DefaultView;
dv.RowFilter = "col_1 LIKE ' * '";
dv.RowStateFilter = DataViewRowState.CurrentRows;
                                                            
if(dv.Count > 0)   // Match found..............
{
strDest1 = dv[0]["value"].ToString();
}
else
{
strDest1 = "No Match Found";
}
                                                                                 
if(dv.Count > 0)  // Match found..........
{
strSrc2 = dv[0]["value"].ToString();      
}
else
{
strSrc2 = "No Match Found";
}
ListViewItem item1 = new ListViewItem(str_col_1.ToString());
item1.SubItems.Add(strDest1.ToString());
item1.SubItems.Add(cnt_count.ToString());
item1.SubItems.Add(str_col_2.ToString());
item1.SubItems.Add(strSrc2.ToString());            
listView1.Items.Add(item1);
}
}
catch(Exception erro)
{
MessageBox.Show(erro.ToString());
}
finally
{
SqlReader2.Close();
cn2.Close();
                                                
listView1.EndUpdate();
}
}
0
Comment
Question by:kvnsdr
3 Comments
 

Accepted Solution

by:
fpasquier earned 125 total points
ID: 11925010
I don't know what is the exact purpose of this code, but their are 2 things that are strange for me:

First thing:
I am not sure to understand the purpose of the two lines:
DataView dv = new DataView(ds.Tables["table2"]);
dv = dt.DefaultView;
Why don't you write smth like:
DataView dv = dt.DefaultView;

Because the first line "dv = new DataView(ds.Tables["table2"]);" has no contribution in your program. It is immediately overwritten by the second line.

And second thing:
The two if-blocks can be grouped in only one!
if(dv.Count > 0)   // Match found..............
{
strDest1 = dv[0]["value"].ToString();
strSrc2 = dv[0]["value"].ToString();    
}
else
{
strDest1 = "No Match Found";
strSrc2 = "No Match Found";
}

0
 
LVL 1

Author Comment

by:kvnsdr
ID: 11925834
Changes well noted. The basic purpose is looking for a match in table1 (col_1) for table2 (col_1 or col_3) and the result is table1 (col_2) which returns a value for one of the listview columns.

NOTE: I also changed the dv.Count to dv.Equals hoping for a match and changed "value" to "col_2" , but it did not work... However, no compiling or run-time errors either..... still getting "No Match Found" in colums 2 and 5 of the listview..............

Q. Is the DataView the right tool for the job???  


DataView dv = new DataView(ds.Tables[0]);
dv.RowFilter = "col_IP LIKE ' ' ";
dv.RowStateFilter = DataViewRowState.CurrentRows;

if(dv.Equals (str_col_1))   // col_1 of table1 or data to match the key in col_1 of table2 (key-value pair concept)
{
strDest1 = dv[0]["col_2"].ToString(); // col_2 of table2 or value needed to display in listview
strSrc2 = dv[0]["col_2"].ToString();  // col_2 of table2 or value needed to display in listview
}
else
{
strDes1 = "No Match Found";
strSrc2 = "No Match Found";








0
 
LVL 37

Assisted Solution

by:gregoryyoung
gregoryyoung earned 125 total points
ID: 11926170
dv.RowFilter = "col_IP LIKE ' ' ";   ... im confused about this ...


DataView dv = new DataView(ds.Tables[0]); //ok you get your dataview
dv.RowFilter = "col_IP LIKE ' * ' "; //you set a rowfilter to like ' * ', why are you doing a like this ? you actually want a space before and after and anything in between ? shouldnt you be setting the rowfilter to the record that you are looking for i.e. the values you are using in the loop ?
dv.RowStateFilter = DataViewRowState.CurrentRows; //makes sense

if(dv.Rows.Count == 1)  {
strDest1 = dv[0]["col_2"].ToString(); // col_2 of table2 or value needed to display in listview
strSrc2 = dv[0]["col_2"].ToString();  // col_2 of table2 or value needed to display in listview
} else if (dv.Rows.Count > 1) {
strDes1 = "Multiple Matches Found";
strSrc2 = "Multiple Matches Found";
}
else
{
strDes1 = "No Match Found";
strSrc2 = "No Match Found";
}

0

Featured Post

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
What .NET URL re-routing tool did I use? 2 54
C# Single Form 8 42
Where did System.Data.Objects go? 2 23
Create a WebAPI using a generic return parameter 9 24
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

808 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