با سلام
چجوری دیتاگرید رو بعد از انجام عملیات درج فرش کرد؟
Printable View
با سلام
چجوری دیتاگرید رو بعد از انجام عملیات درج فرش کرد؟
سلام
روش های مختلفی برای درج اطلاعات در دیتا گرید وجود داره که رفرش شدن دیتا گرید با توجه به روش کار شما میتونه متفاوت باشه ، بعضی روش ها اصلا نیازی به رفرش شدن نداره و خود بخود تغییر اطلاعات همزمان در دیتا گرید اعمال میشه ، شما از چه روشی استفاده کردید؟
کدتون رو بنویسید یا یک نمونه فایل پیوست کنید
ممنونم . من اطلاعاتم رو از طریق یک فرم فرزند میخام وارد گرید کنم از linq هم استفاده کردم
<my:DataGrid Name="dataGrid1" AutoGenerateColumns="False" AlternatingRowBackground="#FFDFE8E8" ItemsSource="{Binding}"GridLinesVisibility="Horizontal"">
<my:DataGrid.Columns>
<my:DataGridTextColumn Header="ردیف" Binding="{Binding Path=ID}" IsReadOnly="True" Width="50"/>
<my:DataGridTextColumn Header="نام" Binding="{Binding Path=Name}" IsReadOnly="True" Width="80"/>
<my:DataGridTextColumn Header="نام خانوادگی" Binding="{Binding Path=Family}" IsReadOnly="True" Width="110"/>
<my:DataGridTextColumn Header="نام پدر" Binding="{Binding Path=Father}" IsReadOnly="True" Width="70"/>
<my:DataGridTextColumn Header="شماره پرونده" Binding="{Binding Path=Rid}" IsReadOnly="True" Width="90"/>
<my:DataGridTextColumn Header="تاریخ تحویل" Binding="{Binding Path=SendDate}" IsReadOnly="True" Width="100"/>
</my:DataGrid.Columns>
</my:DataGrid>
اینم کد گرید هست . در ضمن این گرید توی یک user conrtol هست که توی mainwindow داینامیکی لود میشه
سلام مجدد
منظور من کدی هست که برای linq نوشتی و به چه شکل به گرید ارتباط میدی؟
یکی از روش ها استفاده از ListColletionView هست که نیازی به رفرش نداره
اگر روش استفاده رو نمیدونی بگو تا مثال بگذارم
آهان ببخشید. من از همین روش معمول استفاده کردم
این روشی رو که میگید نمیدونم
var
bimar = from bm in DH.tbl_wrokCircuits
select bm;
dataGrid1.ItemsSource = bimar;
من یکم سرچ کردم ولی متوجه نشدم چجوری ربطش بدم به گرید؟!؟!؟!؟!؟!؟!؟!؟!!؟!؟!؟!؟نقل قول:
یکی از روش ها استفاده از ListColletionView
آقای mehdi550u من هنوز منتظرم :افسرده:
سلام
این یک نمونه که براتون درست کردم
خییییلی ممنونم از لطفتون
سلام
میشه روش edit کردن باlistcollectionview رو هم توضیح بدید؟ listcollectionview یاIeditablelistcollectionview .
من واسه ویرایش مشکل دارم. اکه بخام از طریق فرم فرزند این کارو بکنم refresh انجام نمیشه
سلام
من یک توضیحاتی به همراه مثال به شما میدم
من یک ChildWindow درست کردم که دوتا تکس باکس توش هست که کدش رو در زیر مینویسم
<TextBox Height="23" HorizontalAlignment="Left" Margin="10,36,0,0" Name="txtName" VerticalAlignment="Top" Width="120" Text="{Binding Name, UpdateSourceTrigger=Explicit}"/>
<TextBox Height="23" HorizontalAlignment="Left" Margin="157,36,0,0" Name="txtTel" VerticalAlignment="Top" Width="120" Text="{Binding Tel,UpdateSourceTrigger=Explicit}"/>
اگر دقت کرده باشید این تکس باکس ها Bind شدن و در کد Binding اونها نوشته شده UpdateSourceTrigger=Explicit این به این علت هست که تا زمانی که ما فرمان ندادیم اطلاعات جدید جایگزین اطلاعات قدیم در سورسی که با این تکس باکس ها Bind شده نشود چرا؟ چون ممکنه شما اطلاعات رو تغییر بدید اما منصرف بشید و ثبت نکنید و فرم رو ببندید پس نباید تغییر در دیتاگرید پیدا بشه
حالا
توی همون فرم اولی که داشتیم من یک دکمه اضافه کردم که باعث نمایش ChildWindow به همراه اطلاعات رکورد انتخاب شده میشه
private void btnNewWin_Click(object sender, RoutedEventArgs e)
{
if (this.dataGrid1.SelectedItems.Count == 1)
{
ChildWindow chWin = new ChildWindow { Owner = this, DataContext = this.dataGrid1.SelectedItem };
chWin.ShowDialog();
}
}
دقت کنید ما چک میکنیم که اگر یک رکورد انتخاب شده بود این عمل انجام بشه
در کد بالا ما DataContext فرم CHild رو برابر this.dataGrid1.SelectedItem قرار دادیم این کار باعث میشه که اون Bindig که در فرم Child انجام داده بودیم اطلاعات این رکورد رو نشون بده و هر تغییر در اون TextBox ها باعث تغییر اطلاعات رکورد و همچنین باعث تغییر در شئی db که توی مثال قبل ساخته بودیم بشه (اما یادتون نره ما با تنظیم bindng در حالت UpdateSourceTrigger=Explicit باعث میشیم این تغییرات هر وقت ما بخواهیم اعمال بشه
حالا
توی Child Window یک Button برای ثبت گذاشتیم
private void btnUpdate_Click(object sender, RoutedEventArgs e)
{
BindingExpression binex;
binex = this.txtName.GetBindingExpression(TextBox.TextProp erty);
binex.UpdateSource();
binex = this.txtTel.GetBindingExpression(TextBox.TextPrope rty);
binex.UpdateSource();
(this.Owner as MainWindow).Update();
MessageBox.Show("Update");
}
کد بالا چکار میکنه :
BindingExpression binex;
binex = this.txtName.GetBindingExpression(TextBox.TextProp erty);
binex.UpdateSource();
باعث میشه اون تغییری که دادیم در سورسی که به TextBox Name وصل هست اعمال بشه و در نتیجه در گرید و شئی db هم اعمال میشه
تغییرات در دیتا گرید منعکس شده (نکته اگر UpdateSourceTrigger=Explicit رو نمیگذاشتید این تغییرات بدون فرمان ما هم منعکس میشد و به کد بالا نیاز نبود)
حالا کد زیر
(this.Owner as MainWindow).Update();
متد update رو که در فرم اصلی ساختیم فراخونی میکنه که یک دستور ساده توش هست
public void Update()
{
this.db.SubmitChanges();
}
تغییرات در دیتابیس ذخیره شد
فکر کنم بدونم IEnumarable داده قابل شمارش هستش و در ضمن وقتی اجرا میشه به دیتابیس ارجاع میکنه و دادهها رو در یافت میکنه
ولی Iqueryable تا زمانی که متد Tolist() یا ..... اجرا نشه هیچ ارجاعی به دیتابیس انجام نمیشه درسته ؟!؟!؟!؟!؟!؟!؟