Dilum Jayawardhana
Dilum Jayawardhana

Reputation: 69

How to concatenate three fields as one and display in a datagridview table

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

Answers (4)

Hekkaryk
Hekkaryk

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

Alexander Petrov
Alexander Petrov

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

Lalji Dhameliya
Lalji Dhameliya

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

mostafa
mostafa

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

Related Questions