با سلام خدمت دوستان گرامی
من دوتا پنجره دارم تو یکی دیتاگرید قرار داره که اطلاعات یکی از ستوناش تو پنجره دیگری که یک کمبوباکس وجود داره بایند شده. یعنی آیتم های بایند شده موجود در کمبو باکس همگی در اون ستون از دیتا گرید وجود داره.
حالا من میخوام وقتی پنجره دوم باز میشه آتم کمبو باکس خالی نباشه و رو مقداری که من براش میفرستم set بشه.
تا اینجا مشکلی نیس فقط نمیدونم چطوری این آیتم رو ست کنم. مثلا دستورات زیر رو امتحان کردم ولی بازم هیچ مقداری نگرفت
cmb.SelectedItem = Item; cmb.SelectedValue = Item; cmb.Text = Item; . . . .
از wpf و Entity-FrameWork 6.0 استفاده میکنم.
واقعا دیوانه ام کرده این مسئله
پیشاپیش ممنون بابت راهنمایی هاتون
کد هاتون رو در ادمه این تاپیک قرار بدید تا بررسی ش کنم. و نکته دیگه اینکه پروژه خودتون رو خط به خط trace کنید تا متوجه بشید که داخل آیتم چی پر شده که وقتی برابر cmb.SelectedItem قرار میگیرد مقدار صحیح را به ان انتقال دهد.
-- آیا ItemSource کومبوباکس cmb را پر کرده اید ؟
والا کد خاصی ننوشتم براش. فقط با استفاده از دستورات ItemsSource و DisplayPath اطلاعاتشو بایند کردم تو Loaded
بعد هم همون اول فراخوانی پینجره میخوام بهش مقدار بدم. مقدار رو هم تست کردم مطمئنم درست ارسال میشه اما مقدار نمیگیره
تصویر برنامه :
کد XAML :
<Window x:Class="WpfApplication8.vwComboBox" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="vwComboBox" Height="211" Width="300" Loaded="Window_Loaded"> <Grid> <ComboBox x:Name="cboUsers" DisplayMemberPath="Name" SelectedValuePath="UserID" HorizontalAlignment="Left" Margin="10,38,0,0" VerticalAlignment="Top" Width="272"/> <TextBox x:Name="txtSearch" HorizontalAlignment="Left" Height="23" Margin="10,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="176"/> <Label x:Name="lblShow" Content="" BorderBrush="Olive" HorizontalAlignment="Left" Margin="10,65,0,0" VerticalAlignment="Top" Height="105" Width="272" BorderThickness="1"/> <Button x:Name="btnSearch" Content="Search" HorizontalAlignment="Left" Margin="191,10,0,0" VerticalAlignment="Top" Width="91" Height="23" Click="btnSearch_Click"/> </Grid> </Window>
کد سی شارپ :
public partial class vwComboBox : Window { public vwComboBox() { InitializeComponent(); } private void Window_Loaded(object sender, RoutedEventArgs e) { List<User> result = new List<User>() { new User(){UserID = 1, Name = "Sajad"}, new User(){UserID = 2, Name = "Sima"}, new User(){UserID = 3, Name = "Iman"}, new User(){UserID = 4, Name = "Mehdi"} }; cboUsers.ItemsSource = result; } private void btnSearch_Click(object sender, RoutedEventArgs e) { lblShow.Content = ""; foreach (var item in cboUsers.Items) { var cb = item as User; if (cb.Name.ToLower().Contains(txtSearch.Text.ToLower())) { lblShow.Content += cb.UserID + " - " +cb.Name+"\r\n"; } } } } class User { public int UserID { get; set; } public string Name { get; set; } }
برای این کار کافیست خصوصیت IsEditable کومبوباکس را فعال کنید.
<ComboBox x:Name="cboUsers" IsEditable="True" DisplayMemberPath="Name" SelectedValuePath="UserID" HorizontalAlignment="Left" Margin="10,38,0,0" VerticalAlignment="Top" Width="272"/>
اینم یک مقاله خوب برای کومبوباکس با حالت AutoComplete :
دقت کنید قبل از publish پروژه داخل Sloution تمامی refrence هایی که به پروژه اضافه کرده اید خاصیت CopyLocal = True باشد .
برای ساخت فایل setup میتونید از مقاله زیر کمک بگیرید :
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)