|
Hi all,
I go to control pannel to crate DSN everytime I want to create new one. But I'm trying to create the new DSN for "MySQL ODBC 3.51 Driver" programmatically. I am making research and find alot but neither one is giving me the answer to my question. Maybe I dont' really understand how to work.
Thanks for your help
|
|
|
|
|
|
In Visual Basic, their was an option to add a watch, and also break when the value of a variable changes. If their a similar option available to c# users in VS2005? I have been unable to find any information on this.
Thanks in advance.
|
|
|
|
|
Set the break point then right click and select "Condition" in the popup menu.
In the dialog select the "has changed" radio and type in the variable in the edit box.
led mike
|
|
|
|
|
You can set a breakpoint and have it fire only when a value changes, but that line of code needs to be executed, there's no option to break where-ever a value is changed that I know of.
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
|
|
|
|
|
Using VS2003 DataGrid who can help me set forecolors for individual columns and/or rows? I've looked thru the properties of System.Windows.Forms.DataGridTableStyle() and cannot find anything column / row / cell specfic. In the article by Pete2004 posted on the Code Project ("A Practical Guide to .NET DataTables ...") he uses a DataGrid.Items.Cells..... But in VS2003 I cannot access this property.
Please help. Thx.
|
|
|
|
|
use
dataGridView1.Rows[1].Cells[1].Style.BackColor = Color.Black
dataGridView1.Rows[1].Cells[1].Style.ForeColor = Color.Black
Thanks
Kal
|
|
|
|
|
okay, need more help. I'm working with a WinForms control, not web. Your code is vague to me, I don't see a datagridview, but there is a DataView. However that doesn't control column / row / cell color.
For a WinForm control how can I control column / row / cell colors?
Thanks.
|
|
|
|
|
I'm having trouble figuring out just how I should best approach this.
I have a simple form to edit users
Search fields
DataGridView(view only, no editing)
Edit fields
What I have set up is that when the search is run, 2 datatables are created....1 with slimmed down columns and usable column aliases to be displayed in the datagridview "grid view table", and another that has all columns and data "bulk data table". Both have the same WHERE statements, just different SELECTed columns.
When the enduser clicks on a row in the grid view, the index is pulled from the grid view and used to create a user object from the "bulk data table" which in turn fills all my edit fields with that user's information.
I got this all working correctly until I realized that I could not turn off sorting by header in the grid view, which in turn throws off my indexes to the "bulk data".
I would love for them to be able to sort by the columns, but not at the expense of my whole form not working.
Please let me know if you have any recommendations.
Below is my partial class for the form.
Some of the comments are things I have tried. Below, I was trying to use views to no avail.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace PSTMGR
{
public partial class AdminControl : UserControl
{
IniReader INI;
DataTable dataTable;
DataView dataView;
DataRow dataRow;
UserObj currentUser;
public AdminControl()
{
InitializeComponent();
INI = new IniReader(Application.StartupPath + "\\PSTMGR.INI");
this.DBPath.Text = INI.ReadString("DBInfo","DBPath", "");
}
private void changeDBPath_Click(object sender, EventArgs e)
{
OFD = InitOFD(null);
DialogResult dr = OFD.ShowDialog(this);
if (dr != DialogResult.OK)
return;
string fn = OFD.FileName;
this.DBPath.Text = fn;
INI.Write("DBInfo", "DBPath", fn);
}
private OpenFileDialog InitOFD(OpenFileDialog o)
{
if (o != null)
return o;
o = new OpenFileDialog();
o.InitialDirectory = "C:\\";
o.Title = "Load Image File";
o.CheckPathExists = true;
o.CheckFileExists = true;
o.Filter = "Access DB(*.MDB)"
+ "|*.MDB";
return o;
}
private void searchUsers_Click(object sender, EventArgs e)
{
bool first = true;
String dataQuery = "SELECT * FROM USERS";
if (searchUserName.Text.Length != 0)
{
first = false;
dataQuery += " WHERE USER_NAME = '" + searchUserName.Text + "'";
}
if (searchFirstName.Text.Length != 0)
{
if (first)
{
first = false;
dataQuery += " WHERE";
}
else
{
dataQuery += " AND";
}
dataQuery += " FIRST_NAME = '" + searchFirstName.Text + "'";
}
if (searchLastName.Text.Length != 0)
{
if (first)
{
first = false;
dataQuery += " WHERE";
}
else
{
dataQuery += " AND";
}
dataQuery += " LAST_NAME = '" + searchLastName.Text + "'";
}
dataTable = PSTMGRApp.Connection.Query(dataQuery);
dataView = new DataView(dataTable);
this.adminResults.DataSource = dataView;
fillDataFields();
}
private void adminResults_CellClick(object sender, DataGridViewCellEventArgs e)
{
fillDataFields();
}
private void fillDataFields()
{
if (dataTable.Rows.Count != 0)
{
dataRow = dataTable.Rows[adminResults.CurrentRow.Index];
currentUser = new UserObj(Convert.ToInt32(dataRow["USER_ID"].ToString()),
dataRow["USER_NAME"].ToString(),
dataRow["PASSWORD"].ToString(),
dataRow["FIRST_NAME"].ToString(),
dataRow["LAST_NAME"].ToString(),
Convert.ToBoolean(dataRow["ADMIN_PRIV"]),
Convert.ToBoolean(dataRow["ADD_PRIV"]),
Convert.ToBoolean(dataRow["EDIT_PRIV"]),
Convert.ToBoolean(dataRow["DELETE_PRIV"]));
userName.Text = currentUser.UserName;
passWord.Text = currentUser.Password;
firstName.Text = currentUser.FirstName;
lastName.Text = currentUser.LastName;
adminCheck.Checked = currentUser.Admin;
addCheck.Checked = currentUser.Add;
editCheck.Checked = currentUser.Edit;
deleteCheck.Checked = currentUser.Delete;
}
else
{
currentUser = new UserObj();
userName.Text = null;
passWord.Text = null;
firstName.Text = null;
lastName.Text = null;
adminCheck.Checked = false;
addCheck.Checked = false;
editCheck.Checked = false;
deleteCheck.Checked = false;
}
}
private void clearUsers_Click(object sender, EventArgs e)
{
searchUserName.Text = null;
searchFirstName.Text = null;
searchLastName.Text = null;
}
private void adminResults_Sorted(object sender, EventArgs e)
{
String column = adminResults.SortedColumn.Name.ToString().Trim();
String order = adminResults.SortOrder.ToString().Trim();
MessageBox.Show(column);
MessageBox.Show(order);
switch (column)
{
case "First Name" :
if (order.Equals("Ascending"))
dataView.Sort = "FIRST_NAME ASC";
else if (order.Equals("Descending"))
dataView.Sort = "FIRST_NAME DESC";
break;
case "Last Name" :
if (order.Equals("Ascending"))
dataView.Sort = "LAST_NAME ASC";
else if (order.Equals("Descending"))
dataView.Sort = "LAST_NAME DESC";
break;
case "Username" :
if (order.Equals("Ascending"))
dataView.Sort = "USER_NAME ASC";
else if (order.Equals("Descending"))
dataView.Sort = "USER_NAME DESC";
break;
case "Password" :
if (order.Equals("Ascending"))
dataView.Sort = "PASSWORD ASC";
else if (order.Equals("Descending"))
dataView.Sort = "PASSWORD DESC";
dataTable.DefaultView.Sort = "[PASSWORD]";
break;
}
}
}
}
Michael
-- modified at 1:23 Friday 11th August, 2006
|
|
|
|
|
Don't use the row index to obtain a row from a related table, use a foreign key relationship.
led mike
|
|
|
|
|
Thanks Mike....that makes total sense now. Am I going about this the best way, or is there a better method I should follow? Having two datatables hits the database twice(detached, doesn't lock data), so would it be better to just hit the database for the bulk table, then create a dataview from that and use it for the grid view? Would that decrease overhead or would it even be noticable?
I'm a bit new to c# and ado, so any input is appreciated.
Michael
|
|
|
|
|
I had several projects where I used the Schema Editor in VS to create the relationships. Then used the DataSet Generator to produce a "typed" DataSet. With a "typed" DataSet you get a parent-child Object Model.
I would not claim it is a perfect solution but for my needs in those projects it greatly simplified the data access development of the system.
As a note: those projects were in VS2003 and I have not yet worked with those tools in VS2005.
led mike
|
|
|
|
|
I'll look into that. Thanks
Michael
|
|
|
|
|
Here is my solution
gridRow = adminResults.Rows[adminResults.CurrentRow.Index];
String key =
gridRow.Cells["Username"].FormattedValue.ToString().Trim();
dataRows = dataTable.Select("USER_NAME = '" + key + "'");
Hope this helps anyone else.
Michael
|
|
|
|
|
I wanted to perform a one-time validation when my DataGridView is first loaded and displayed. My PopulateControl() method, however, seems to set row.ErrorText too soon, as no error icons appear.
Moving it to the RowPrePaint event is fine as long as I know when I'm done completely processing all row paint events so that I can safely clear my InInitializeState when all procesing is done.
So besides the RowPrePaint event .. is there one final event that control puts out that I can listen for to know that I'm done initializing my DataGridView???
Thanks
|
|
|
|
|
You should be able to use this[^] to find out.
led mike
|
|
|
|
|
Greetings:
I am working my way through the MCSD "Developing Windows Based Apps" book. I'm in the section on databases and ADO. This chapter is woefully lacking in working examples so I am trying to contrive my own in order to see some of this stuff in action. To do this, I am connecting to the Northwind database supplied with Access in order to have a database to play with.
OK, so I have successfully connected to Northwind, I have used data readers and data adaptors to load tables from Northwind into data sets. I have successfully displayed the data using data grids. I have also successfully executed non querys, scalars and readers. Eveything is going tickety-boo.
However, the last thing on my agenda before moving on is to ADD a row to one of the tables and then actually write it back to the Northwind database file. To do this, I have fashioned a simple input form and when I get all the required input fields, I return from the form and execute the following:
<br />
private void btnAddSupplier_Click(object sender, System.EventArgs e)<br />
{<br />
AddSupplier frmAdd = new AddSupplier();<br />
frmAdd.ShowDialog( this );<br />
<br />
if (frmAdd.AddSelected == false)<br />
return;<br />
<br />
oleDbDataAdapter_Suppliers.Fill( dataSet_Suppliers );<br />
<br />
DataRow dr = dataSet_Suppliers.Tables[0].NewRow();<br />
dr["SupplierID"] = System.DBNull.Value;<br />
dr["CompanyName"] = frmAdd.CompanyName;<br />
dr["ContactName"] = frmAdd.ContactName;<br />
dr["ContactTitle"] = frmAdd.ContactTitle;<br />
dr["Address"] = frmAdd.Address;<br />
dr["Region"] = frmAdd.City;<br />
dr["City"] = frmAdd.RegionProv;<br />
dr["PostalCode"] = frmAdd.Postal;<br />
dr["Country"] = frmAdd.Country;<br />
dr["Phone"] = "";<br />
dr["FAX"] = "";<br />
dr["HomePage"] = "";<br />
<br />
oleDbDataAdapter_Suppliers.Update( dataSet_Suppliers );<br />
dataSet_Suppliers.Tables[0].Rows.Add( dr );<br />
dr.AcceptChanges();<br />
}<br />
"dataSet_Suppliers" and "oleDbDataAdaptor_Suppliers" are both members of the main form that I am using for my experimentation scaffold. I am certain that the adaptor and data set are successfully loaded with the Supplier table. I am able to Fill the supplier data set through the data adaptor and bind the data set to a data grid and display it.
The problem is that the above code does not write the new row to the database file. It appears unchanged. The code executes OK, but the changes are not applied to the file. I am confused about the order in which I should call "AcceptChanges" for the DataRow and "Update" for the data adaptor. The MCSD book says that you must call "Update" on the data adaptor FIRST. I don't quite get why this is so but I have fooled around with the order and it doesn't make any difference. There is no change to the database file.
I am obviously a novice so I am assuming that I am missing a step somewhere. Any help would be appreciated.
Thank you,
Mark
|
|
|
|
|
Add before update?
A man said to the universe:
"Sir I exist!"
"However," replied the Universe, "The fact has not created in me A sense of obligation."
-- Stephen Crane
|
|
|
|
|
Is that a question or a suggestion?
M.
|
|
|
|
|
Suggestion but untested one. The ? absolves me of responsibility for it not working :p
A man said to the universe:
"Sir I exist!"
"However," replied the Universe, "The fact has not created in me A sense of obligation."
-- Stephen Crane
|
|
|
|
|
Hi Ennis:
I tried your suggestion. Now the lower part of my code block looks like this:
<br />
dr["HomePage"] = "";<br />
dataSet_Suppliers.Tables[0].Rows.Add( dr );<br />
oleDbDataAdapter_Suppliers.Update( dataSet_Suppliers );<br />
dr.AcceptChanges();<br />
The call to "Update" now throws an OleDbException.
Thanks for your help anyway. If you have any other thoughts, I'm all ears...
Mark
|
|
|
|
|
move accept up one line. BTW, what are the specifics of the exception.
A man said to the universe:
"Sir I exist!"
"However," replied the Universe, "The fact has not created in me A sense of obligation."
-- Stephen Crane
|
|
|
|
|
try the following code...
DataRowView NewRow = DataSet.Tables[TableName].DefaultView.AddNew()
NewRow[ColumnName] = "";
NewRow.EndEdit();
DataAdapter.Update(DataSet, TableName);
bahaa
|
|
|
|
|
OK, so my code now looks like this:
<br />
DataRowView drv = dataSet_Suppliers.Tables[0].DefaultView.AddNew();<br />
drv["SupplierID"] = System.DBNull.Value;<br />
... more field assignments here ...<br />
drv["HomePage"] = "";<br />
drv.EndEdit();<br />
oleDbDataAdapter_Suppliers.Update( dataSet_Suppliers, "Suppliers" );<br />
When I call the "Update" command, an OleDbException is thrown.
Any other thoughts?
Mark
|
|
|
|
|
What the OleDbException message say...?
|
|
|
|