2016-07-19 10 views
0

を三つのフィールドを連結する方法、私はBorrower nameとしてフィールドを持っていると私はFirst NameMiddle NameLast Nameを収集するためのフォームを使用しています。だから私が望むのはFirst NameMiddle NameLast Nameの値をBorrower nameとしてDataGridViewに設定することです。はDataGridViewのテーブルに1と表示として私<code>DataGridView</code>で

私はこのようなことをしましたが、その時点ではFirst Nameと表示されています。

datagrid_borrowers.Rows[n].Cells[2].Value = item["first_name"].ToString(); 

私は"first_name+, middle_name+, last_name"に項目名を変更しようとしたが、プログラムブレーク。

どうすればこの問題を解決できますか?だから私はFirst NameMiddle NameLast Nameの値をBorrower nameと連結することができます。これを試してみてください

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(); 
    } 
} 
+1

sqlのクエリに文字列連結のためのsynatxをもう1つ追加します。たとえば、 'Select *、first_name + middle_name + last_name from ... 'です。また、ループ内に行を追加するのではなく、 'DataSource'プロパティ(' datagrid_borrowers.DataSource = dt; ')を使うことができます。 – ASh

+1

これは' DataGridView'を使って作業するための最も汚い方法です。なぜデータバインディングを使用しないのですか?次に、問題に対してより洗練されたソリューションを使用できます。 –

答えて

0

は、ここに私の完全なコードです

datagrid_borrowers.Rows[n].Cells[2].Value = item["first_name"].ToString() 
            + " " + item["middle_name"].ToString() 
            + " " + item["last_name"].ToString(); 
0
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(); 
    } 
} 
0

あなたは結果がDataRowオブジェクトのコレクションになりますので、ご使用のデータベースからデータをフェッチするためにデータ・テーブル・アダプタを使用していました

各オブジェクトに格納されているフィールドにアクセスするには、Indexerを使用する必要がありますこのlinkは、このインデクサに1つの列名だけを渡す必要があります。

最も簡単な方法は、あなたのコードがきれいで読みやすくなります。この

datagrid_borrowers.Rows[n].Cells[2].Value = String.Format("{0} {1} {2}", 
    item["first_name"].ToString() 
    item["Middle_name"].ToString() 
    item["Last_name"].ToString() 
); 

この方法として、String.Formatのを使用することです。

+0

私はこれについて知らなかった、これを使用しようとします。本当にコードが好きです。ありがとう –

0

データバインディングを最大限に活用してください!

DataColumn.Expressionも使用してください。

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; 

DataGridViewに手動で列を作成しないでください。

+0

この@Alexanderをチェックしますが、手動で列を作成すべきではないのはなぜですか? –

+0

@DilumJayawardhana - 列が自動的に作成されるためです。 –

関連する問題