ورود

View Full Version : سوال: استفاده از متغیر به جای تکس باکس در این کد



water_lily_2012
سه شنبه 18 بهمن 1390, 17:41 عصر
سلام
من در کد زیر مقدار ستون یک دیتاگرید را در یک تکس باکس می ریزم. آیا می شود به جای تکس باکس از متغیر استفاده کرد.

DOETextBox.DataContext = this.BookDataGrid.SelectedItem;

البته از متغیری از نوع object استفاده کردم ولی مقدار را نمی دهد و BLL.ExplainClass یعنی نام کلاس را می دهد.
فکر کنم یک عمل cast نیاز داشته باشه که من نمی دانم.

water_lily_2012
چهارشنبه 26 بهمن 1390, 09:22 صبح
کسی راهی برای این کار داره. لطفا اساتید کمک کنند.

B.I.O.H.A.Z.A.R.D
چهارشنبه 26 بهمن 1390, 10:54 صبح
ببینید این کد بدردتون میخوره:

object x = this.DataGrid1.SelectedItem;
MessageBox.Show(x.ToString());
TextBox1.DataContext = this.DataGrid1.SelectedItem;
MessageBox.Show(TextBox1.DataContext.ToString());

user6627
چهارشنبه 26 بهمن 1390, 16:37 عصر
سلام
شما دو راه برای اینکار دارید:

1. Binding که یک متغیر را به ستون مورد نظر یا تکست باکس مورد نظر متصل کنید

2- code behind یعنی در محیط کد نویسی و با انتخاب هر سطر دیتا گرید اطلاعات در متغیر مورد نظر ذخیره شود

water_lily_2012
چهارشنبه 26 بهمن 1390, 16:47 عصر
ببینید این کد بدردتون میخوره:

object x = this.DataGrid1.SelectedItem;
MessageBox.Show(x.ToString());
TextBox1.DataContext = this.DataGrid1.SelectedItem;
MessageBox.Show(TextBox1.DataContext.ToString());
سلام
تشکر از اینکه جواب دادید. فکر کنم متوجه منظور من شده اید. اما متاسفانه کد شما جواب نمی دهد همانطور که در بالا توضیح دادم دو خط اول کد شما را نوشتم ولی به جای مقدار فیلد نام کلاس را بر می گرداند. من می خواهم که مقدار فیلد را برگرداند.

B.I.O.H.A.Z.A.R.D
چهارشنبه 26 بهمن 1390, 19:42 عصر
سلام
تشکر از اینکه جواب دادید. فکر کنم متوجه منظور من شده اید. اما متاسفانه کد شما جواب نمی دهد همانطور که در بالا توضیح دادم دو خط اول کد شما را نوشتم ولی به جای مقدار فیلد نام کلاس را بر می گرداند. من می خواهم که مقدار فیلد را برگرداند.

منم متوجه سوال شما نشده بودم :) الان که توضیح دادید متوجه شدم دقیقا چی میخواید. اگر اشتباه نکنم میخواید وقتی روی یه سطر از دیتاگرید کلیک میکنید، مقدار یه فیلد خاص بره توی یه متغیر. من این کار رو به این صورت انجام میدم:

کد XAML:

<TextBlock x:Name="textBox2" Height="36" Margin="196,0,183,105" TextWrapping="Wrap" Text="{Binding ElementName=DataGrid1, Path=SelectedItem.CategoryID}" VerticalAlignment="Bottom"/>
که اون CategoryID اسم فیلد مورد نظره منه، حالا شما به تناسب اونو عوض کنید و چیزی که میخواید رو بذارید. ElementName هم میشه اسم دیتاگرید.
کد C#‎:
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
// TODO: Add event handler implementation here.
string x = this.textBox2.Text;
MessageBox.Show(x.ToString());
}

همونطور که دوستمون گفت، از Binding باید استفاده کرد.

water_lily_2012
پنج شنبه 27 بهمن 1390, 09:32 صبح
نه. پس هنوز متوجه منظور من نشده اید. کد اول من را ببینید. دقیقا درست کار میکنه.DOETextBox یک تکس باکس هست که به یک property بایند شده و با کلیک روی هر سطر از دیتاگرید مقدار همون Property داخل تکس باکس قرار میگیره. بعد هم میشه مقدار تکس باکس را داخل یک متغیر ریخت.
من تا اینجا مشکلی ندارم.
مشکل من اینکه نمی خواهم اول دیتاگرید را به یک تکس باکس مرتبط کنم. می خواهم به جای تکس باکس از متغیر استفاده کنم. راحتتر توضیح بدم بایند مستقیم به متغیر و نه به تکس باکس.
اصلا امکان چنین کاری هست.؟؟؟؟

PetekDincos
پنج شنبه 27 بهمن 1390, 12:27 عصر
با سلام
دوست عزیز SelectedItem کنترل DataGrid نوعش چیه شما بایستی اول این رو بدونید ممکنه شما یه لیست از نوعهای اصلی مثل int درست کرده باشید و دیتاگراید رو به این لیست بایند کرده باشید و یا از یه جدول کوئری گرفته باشید و به دیتاگراید بایند کرده باشید و برای این کار شیوه صحیحش اینه بیایی و در رویداد SelectionChanged کنترل دیتاگراید با توجه به نوعت که ما اینجا فرض می کنیم Class1 باشه که دارای چند تا پراپرتی می باشه مثلا Name,Family,Age به صورت زیر بنویس


Class1 MyClass=(Class1)((sender as DataGrid).SelectedItem);
string MyName=MyClass.Name;
int MyAge=MyClass.Age;

اگه باز متوجه نشدی سورس بذار تا بررسی بشه با تشکر

water_lily_2012
پنج شنبه 27 بهمن 1390, 14:30 عصر
سلام
تشکر
چرا متوجه نشم. دقیقا چنین چیزی می خواستم ومشکل حل شد. یعنی نمی خواستم از textBox استفاده کنم.