PDA

View Full Version : سوال: ترکیب دو ستون از دیتاتیبل



zarzari
دوشنبه 30 اردیبهشت 1392, 17:55 عصر
با سلام
من میخواهم به DataGridView ام یک column اضافه کنم که DataPropertyName آن از ترکیب دو ستون مختلف دیتاستم به دست آمده است. برای این منظور، یک ستون جدید با نام FullName به دیتاتیبلم اضافه کرده و با استفاده از پروپرتی Expression ، الحاق دو ستون را داخل آن ریخته ام. کد آن بدین صورت می باشد:


Dim FullName As New DataColumn("FullName")
FullName.DataType = GetType(String)
FullName.Expression = DSSearchEmployee.Tables(0).Columns("EmpName").ToString + "" + DSSearchEmployee.Tables(0).Columns("Family").ToString
'FullName.Expression = "EmpName + ' ' + Family"
DSSearchEmployee.Tables(0).Columns.Add("FullName")



اما هنگام اجرا ستون نام کامل که با دستور زیر مقدار گرفته:


DGView1.Columns("EmpNameFamily").DataPropertyName = DSSearchEmployee.Tables(0).Columns("FullName").ToString


خالی می باشد. در صورتیکه اگر همین فراخوانی به جای FullName با EmpName یا Family پر شود، دارای مقدار خواهد بود.
از دوستان کسی می تواند راهنمائی کند اشکال من کجاست؟
ممنون.

zarzari
چهارشنبه 01 خرداد 1392, 07:39 صبح
یعنی تا حالا کسی اینجا نخواسته دوستون از دیتاتیبلش رو داخل یک ستون از دیتاگریدویو نشون بده؟
اگه بگین چه جوری باید این کار رو انجام بدم، ممنون می شم.

cherchil_hra
چهارشنبه 01 خرداد 1392, 07:58 صبح
به جدولتون یک فیلد اضافه کنید و در قسمت Exprision فیلدتون فقط نام فیلدهایی که می خواهید با هم ترکیب بشوند رو بنویسید

FullName.Expression ="EmpName+' - ' +Family"

zarzari
چهارشنبه 01 خرداد 1392, 09:17 صبح
ممنون از جوابتون
اما اگه دقت کرده باشین این دستور توی کدهای خودم هم هست،
اما جواب نداد. اشتباه از من هست؟ شما کد رو تست کردین؟

alimanam
چهارشنبه 01 خرداد 1392, 12:52 عصر
با سلام


Imports System.Data.OleDb
Public Class Form1

Private cnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb;")
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

' روش اول
'Dim ad As New OleDbDataAdapter("Select ID,Fname,Lname From myFriends", cnn)
'Dim ds As New DataSet
'Dim fullname As New DataColumn("Full Name", GetType(String), "Fname + ' ' + Lname")
'ad.Fill(ds)
'ds.Tables(0).Columns.Add(fullname)
'dgv.DataSource = ds.Tables(0)

' روش دوم
Dim ad As New OleDbDataAdapter("Select ID,Fname + ' ' + Lname as Fullname,Tell From MyFriends", cnn)
Dim dt As New DataTable
ad.Fill(dt)
dgv.DataSource = dt

End Sub

End Class

موفق باشید./

zarzari
چهارشنبه 01 خرداد 1392, 18:18 عصر
ممنون آقای alimanam
قصد من استفاده از روش اول بود که نمی دانم چرا جواب نمی دهد. من ستون های EmpName و Family را دستی ایجاد نکرده ام، بلکه ستون های آماده ای هستند که از دیتابیس خوانده و داخل دیتاست ریخته ام. شاید مشکل مربوط به این باشد.
جالب اینجاست که ستون های EmpName و Family نیز درست تشخیص داده می شود. یعنی اگر من کوچکترین تغییری در اسم این فیلدها بدهم، با خطا مواجه می شوم. اما هنگامی که نام آنها درست باشد، ستون نام کامل در گرید من خالی است! در حالیکه اگر DataPropertyName را هریک از EmpName یا Family انتخاب کنم، ستون گرید مقدار می گیرد. یعنی مسلما این ستون ها خالی نیستند. نمی دانم چرا ترکیب آنها خالی می شود.
به هر حال لطف کردین.
فکر کنم آخرش مجبور باشم مانند روش دوم، کوئری ام را تغییر بدهم.
باز هم ممنون.