PDA

View Full Version : ظاهر نشدن سطر جدید در Datagrid



alireza264
دوشنبه 01 تیر 1394, 12:30 عصر
سلام
اگه یک دیتا گرید داشته باشیم که با یک datatable بایند شده باشه و binding فیلد ها هم دوطرفه باشه . زمانیکه در سطر آخر Datagrid تایپ کنید سطر جدید به datagrid اضافه میشه اما نمایش داده نمیشه(با DG.Items.Count میشه دید) و تا زمانکه از سطر خارج بشید. این مشکل حتی با وجود CanUserAddRows="True" هم حل نمیشه.
کسی این مشکل و برخورد کرده ویا راه حلی براش داره
دلیل استفاده هم در دفترتلفن هستش که بشه چند شماره رو همزمان تایپ و ثبت کنه
پشاپیش از راهنمایی هاتون سپاسگزارم


<!-- ساعت -->
<DataGrid AutoGenerateColumns="False" Grid.Column="1" HorizontalAlignment="Stretch" ItemsSource="{Binding}"
Name="DG_Phone" FlowDirection="RightToLeft" FontFamily="B Nazanin" FontWeight="Bold" FontSize="13"
VerticalAlignment="Stretch" Grid.RowSpan="7" SelectionUnit="CellOrRowHeader" GotFocus="DG_Phone_GotFocus"
AlternatingRowBackground="#FFE5E5E5" AlternationCount="2" AreRowDetailsFrozen="True"
SelectedCellsChanged="DG_Phone_SelectedCellsChanged" CanUserAddRows="True">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=PhoneType, Mode=TwoWay}" Header="نوع تلفن" Width="80" IsReadOnly="False" />
<DataGridTextColumn Binding="{Binding Path=CityPhone, Mode=TwoWay}" Header="شهر" Width="70" IsReadOnly="False"/>
<DataGridTextColumn Binding="{Binding Path=Phone_Nmuber, Mode=TwoWay}" Header="شماره" Width="150" IsReadOnly="False"/>
<DataGridTextColumn Binding="{Binding Path=Comment, Mode=TwoWay}" Header="توضیحات" Width="100" IsReadOnly="False"/>
</DataGrid.Columns>
</DataGrid>





132506

SabaSabouhi
دوشنبه 01 تیر 1394, 18:39 عصر
سلام
اگه یک دیتا گرید داشته باشیم که با یک datatable بایند شده باشه و binding فیلد ها هم دوطرفه باشه . زمانیکه در سطر آخر Datagrid تایپ کنید سطر جدید به datagrid اضافه میشه اما نمایش داده نمیشه(با DG.Items.Count میشه دید) و تا زمانکه از سطر خارج بشید. این مشکل حتی با وجود CanUserAddRows="True" هم حل نمیشه.
کسی این مشکل و برخورد کرده ویا راه حلی براش داره
دلیل استفاده هم در دفترتلفن هستش که بشه چند شماره رو همزمان تایپ و ثبت کنه
پشاپیش از راهنمایی هاتون سپاسگزارم


<!-- ساعت -->
<DataGrid AutoGenerateColumns="False" Grid.Column="1" HorizontalAlignment="Stretch" ItemsSource="{Binding}"
Name="DG_Phone" FlowDirection="RightToLeft" FontFamily="B Nazanin" FontWeight="Bold" FontSize="13"
VerticalAlignment="Stretch" Grid.RowSpan="7" SelectionUnit="CellOrRowHeader" GotFocus="DG_Phone_GotFocus"
AlternatingRowBackground="#FFE5E5E5" AlternationCount="2" AreRowDetailsFrozen="True"
SelectedCellsChanged="DG_Phone_SelectedCellsChanged" CanUserAddRows="True">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=PhoneType, Mode=TwoWay}" Header="نوع تلفن" Width="80" IsReadOnly="False" />
<DataGridTextColumn Binding="{Binding Path=CityPhone, Mode=TwoWay}" Header="شهر" Width="70" IsReadOnly="False"/>
<DataGridTextColumn Binding="{Binding Path=Phone_Nmuber, Mode=TwoWay}" Header="شماره" Width="150" IsReadOnly="False"/>
<DataGridTextColumn Binding="{Binding Path=Comment, Mode=TwoWay}" Header="توضیحات" Width="100" IsReadOnly="False"/>
</DataGrid.Columns>
</DataGrid>







سلام
من این رو تجربه نکردم، اما می‌تونم دلیل رو حدس بزنم.
تو WPF وقتی که چیزی به DataSource اضافه می‌شه، فقط به شرطی تو کنترل متوجه این قضیه می‌شه که
یه جوری بهش اطلاع بدی، برای Propertyها نیاز به INotifyPropertyChanged هست و برای مجموعه‌ها هم یه
interface دیگه هست که اگه اشتباه نکنم INotifyCollectionChanged یا یه چیزی شبیه به این بود.
به احتمال خیلی زیاد DataTable این اینترفیس رو نداره و دلیل مشکل شما هم همینه.
کافیه بجای DataTable از ObservableCollection استفاده کنی و مشکل باید حل بشه.

صبا صبوحی

alireza264
دوشنبه 01 تیر 1394, 20:10 عصر
سلام وسپاس از توجهتون
اما قبلا با ObservableCollection هم امتحان کردم ولی نشد.چون مشکل ایبنجاست که تا وقتی ازسطر آخرخارج نشید Datasource آپدیت نمیشه و از طرفی نمایش Datagrid هم Refresh نمیشه و اگه بخوایم وقتی توی سطر آخر چیزی تایپ میکنیم نمایش Datagrid هم Refresh بشه خطا میده که هنگام آپدیت سلول نمیشه Refresh کرد
عکس هنگام تایپ درسطر آخر
http://barnamenevis.org/attachment.php?attachmentid=132517&stc=1&d=1434990042


عکس پس از رفتن به سطر بالایی

SabaSabouhi
سه شنبه 02 تیر 1394, 09:24 صبح
سلام
ببخشید، من تازه متوجه منظورت شدم.
درسته، وقتی در حال ویرایش هستی ذخیره سازی انجام نمی‌شه. من معمولاً توی Grid ویرایش نمی‌کنم، اما هر وقت با این
مشکل مواجه می‌شم ( یعنی می‌خوام با زدن دکمه‌ی ذخیره، اطلاعات رو ذخیره کنم ) اولین کارم اینه که فرم رو Focus می‌کنم
با این کار focus از کنترل در حال ویرایش خارج می‌شه و این مشکل حل می‌شه. شاید این روش به درد شما هم بخوره.

صبا صبوحی