Reputation: 69
In my DataGridView
, I have field as Borrower name
and I'm using a form to collect the First Name
, Middle Name
and Last Name
. So what I want is to set First Name
, Middle Name
and Last Name
values as Borrower name
in my DataGridView
.
I did something like this, Which only shows First Name
at the moment.
datagrid_borrowers.Rows[n].Cells[2].Value = item["first_name"].ToString();
I tried changing item name to "first_name+, middle_name+, last_name"
but the program breaks.
How can I achieve this? So that I can concatenate First Name
, Middle Name
and Last Name
values as Borrower name
.
Here's my full code:
private void DisplayData()
{
sda = new MySqlDataAdapter("Select * from user_reg where user_type = 'Member' ",conn);
dt = new DataTable();
sda.Fill(dt);
datagrid_borrowers.Rows.Clear();
foreach (DataRow item in dt.Rows)
{
int n = datagrid_borrowers.Rows.Add();
datagrid_borrowers.Rows[n].Cells[0].Value = (n + 1).ToString();
datagrid_borrowers.Rows[n].Cells[1].Value = item["user_id"].ToString();
datagrid_borrowers.Rows[n].Cells[2].Value = item["first_name"].ToString();
datagrid_borrowers.Rows[n].Cells[3].Value = item["address"].ToString();
datagrid_borrowers.Rows[n].Cells[4].Value = item["sex"].ToString();
datagrid_borrowers.Rows[n].Cells[5].Value = item["nic_number"].ToString();
datagrid_borrowers.Rows[n].Cells[6].Value = item["contact_number"].ToString();
datagrid_borrowers.Rows[n].Cells[7].Value = item["email_address"].ToString();
}
}
Upvotes: 0
Views: 4437
Reputation: 522
Try this:
datagrid_borrowers.Rows[n].Cells[2].Value = item["first_name"].ToString()
+ " " + item["middle_name"].ToString()
+ " " + item["last_name"].ToString();
Upvotes: 1
Reputation: 14261
Use the full power of data binding!
Also use DataColumn.Expression property.
sda = new MySqlDataAdapter("Select * from user_reg where user_type = 'Member' ",conn);
dt = new DataTable();
sda.Fill(dt);
// Add full_name column with expression.
dt.Columns.Add("Full Name", typeof(string),
"first_name + ' ' + middle_name + ' ' + last_name");
datagrid_borrowers.DataSource = dt; // data binding
// Hide unnecessary columns.
datagrid_borrowers.Columns["first_name"].Visible = false;
datagrid_borrowers.Columns["middle_name"].Visible = false;
datagrid_borrowers.Columns["last_name"].Visible = false;
Note that you should not be manually created columns in DataGridView
.
Upvotes: 1
Reputation: 1769
private void DisplayData()
{
sda = new MySqlDataAdapter("Select * from user_reg where user_type = 'Member' ",conn);
dt = new DataTable();
sda.Fill(dt);
datagrid_borrowers.Rows.Clear();
foreach (DataRow item in dt.Rows)
{
int n = datagrid_borrowers.Rows.Add();
datagrid_borrowers.Rows[n].Cells[0].Value = (n + 1).ToString();
datagrid_borrowers.Rows[n].Cells[1].Value = item["user_id"].ToString();
datagrid_borrowers.Rows[n].Cells[2].Value = item["first_name"].ToString() + item["middle_name"].ToString() + item["last_name"].ToString();
datagrid_borrowers.Rows[n].Cells[3].Value = item["address"].ToString();
datagrid_borrowers.Rows[n].Cells[4].Value = item["sex"].ToString();
datagrid_borrowers.Rows[n].Cells[5].Value = item["nic_number"].ToString();
datagrid_borrowers.Rows[n].Cells[6].Value = item["contact_number"].ToString();
datagrid_borrowers.Rows[n].Cells[7].Value = item["email_address"].ToString();
}
}
Upvotes: 1
Reputation: 289
You have used data table adapter to fetch data from your database so result will be a collection of DataRow objects
for accessing fields that stored in each object you should use Indexer, as you can see in this link you have to pass just one column name to this indexer.
the simplest way is to use String.Format, as this
datagrid_borrowers.Rows[n].Cells[2].Value = String.Format("{0} {1} {2}",
item["first_name"].ToString()
item["Middle_name"].ToString()
item["Last_name"].ToString()
);
this way your code will be clean and more readable.
Upvotes: 1