استفاده از دیتا گرید تو در تو در WPF
باسلام خدمت دوستان
قصد دارم دیتا گرید تو در تو درست کنم
مثلا لیست کشورهارو تو یه دیتا گرید داریم
وقتی روی یه ردیف سلکت کردیم یه دیتاگرید زیر همون ردیف باز بشه و لیست استان های اون کشور رو بیاره
و وقتی روی استانی سلکت کردیم لیست شهر های اون استان زیرش بیاد
الان من میخوام تو پروژه خودم اینکار رو بکنم
ولی با منطقه و محدوده و محله
<DockPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,73,0,100">
<DataGrid x:Name="dgMantaghe" Background="Azure" FlowDirection="RightToLeft" AutoGenerateColumns="False" IsReadOnly="True" Margin="0,50,0,0" CanUserAddRows="False" EnableRowVirtualization="true">
<DataGrid.Columns>
<DataGridTextColumn x:Name="MantagheIDColumn" Header="کد منطقه" Binding="{Binding MantagheID}" />
<DataGridTextColumn x:Name="MantagheColumn" Header="منطقه" Binding="{Binding Mantaghe}" />
<DataGridTextColumn x:Name="MantagheTozihColumn" Header="توضیحات منطقه" Binding="{Binding MantagheTozih}" />
<DataGridTextColumn x:Name="MantagheWebColumn" Header="وب سایت" Binding="{Binding MantagheWeb}" />
<DataGridTextColumn x:Name="MantagheEmailColumn" Header="ایمیل" Binding="{Binding MantagheEmail}" />
<DataGridTextColumn x:Name="MantagheTelColumn" Header="تلفن های تماس" Binding="{Binding MantagheTel}" />
<DataGridTextColumn x:Name="MantagheFaxColumn" Header="فکس" Binding="{Binding MantagheFax}" />
<DataGridTextColumn x:Name="MantagheAddressColumn" Header="آدرس" Binding="{Binding MantagheAddress}" />
<DataGridTextColumn x:Name="UserFamiliColumn" Header="کاربر ثبت کننده" Binding="{Binding UserFamili}" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid x:Name="dgMahdode" Background="Azure" FlowDirection="RightToLeft" AutoGenerateColumns="False" IsReadOnly="True" Margin="0,50,0,0" CanUserAddRows="False" EnableRowVirtualization="true">
<DataGrid.Columns>
<DataGridTextColumn x:Name="MahdodeIDColumn" Header="کد محدوده" Binding="{Binding MahdodeID}" />
<DataGridTextColumn x:Name="MahdodeColumn" Header="محدوده" Binding="{Binding Mahdode}" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid x:Name="dgMahal" Background="Azure" FlowDirection="RightToLeft" AutoGenerateColumns="False" IsReadOnly="True" Margin="0,50,0,0" CanUserAddRows="False" EnableRowVirtualization="true">
<DataGrid.Columns>
<DataGridTextColumn x:Name="MahalIDColumn" Header="کد محل" Binding="{Binding MahalID}" />
<DataGridTextColumn x:Name="MahalColumn" Header="محل" Binding="{Binding Mahal}" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</DockPanel>
حالا خود دیتا گرید درست وقتی روی یه ردیف کلیک میکنم دیتاگرید دوم زیرش باز میشه ولی آیتم سورس دیتاگرید دوم رو نمیتونم پور کنم چون اسم دیتاگرید رو تو صفحه xaml.cs نمیشناسه و نمیتونم براش سورس تعریف کنم
سورس دیتاگرید اول رو هم که طبق آموزش با کد زیر پرمیکنم
private void ShowInfo(Func<string> SearchString)
{
var query = DbDatabase.Database.SqlQuery<ViewMantaghe>("SELECT * FROM ViewMantaghe Where 1=1 " + SearchString());
var q = query.ToList();
dgMantaghe.ItemsSource = q;
}
برای هر سه موارد منطقه و محدود و محل فرم های جداگانه و دیتاگرید های جدا دارم میخوام اگه بشه مثل درختواره زیر هم هم بیان
الان باید چیکار کنم
پاسخ هوش مصنوعی
برای مدیریت و پر کردن دیتاگرید های تو در تو در WPF، شما باید از کامپوننت های مختلفی استفاده کنید و ارتباطات لازم را در کد پشتی (xaml.cs) بسازید. به عنوان یک شروع، شما می توانید از رویداد DataGrid.RowDetailsVisibilityChanged برای تعیین زمان بارگذاری داده های هر دیتاگرید استفاده کنید.
زیر به یک مثال از نحوه پیاده سازی بارگذاری داده ها برای دیتاگرید دوم (محدوده) و دیتاگرید سوم (محله) در نظر داشته باشید:
private void dgMantaghe_RowDetailsVisibilityChanged(object sender, DataGridRowDetailsEventArgs e)
{
if (e.DetailsVisibility == Visibility.Visible)
{
var selectedMantaghe = (ViewMantaghe)e.Row.Item;
// بارگذاری داده های دیتاگرید دوم (محدوده)
var mahdodeQuery = DbDatabase.Database.SqlQuery("SELECT * FROM Mahdode WHERE MantagheID = @MantagheID",
new SqlParameter("@MantagheID", selectedMantaghe.MantagheID));
dgMahdode.ItemsSource = mahdodeQuery.ToList();
}
}
همچنین برای بارگذاری دیتاگرید سوم (محله) هنگامی که ردیف مربوط به محدوده انتخاب می شود، می توانید از رویداد DataGrid.RowDetailsVisibilityChanged برای dgMahdode استفاده کنید:
private void dgMahdode_RowDetailsVisibilityChanged(object sender, DataGridRowDetailsEventArgs e)
{
if (e.DetailsVisibility == Visibility.Visible)
{
var selectedMahdode = (Mahdode)e.Row.Item;
// بارگذاری داده های دیتاگرید سوم (محله)
var mahalQuery = DbDatabase.Database.SqlQuery("SELECT * FROM Mahal WHERE MahdodeID = @MahdodeID",
new SqlParameter("@MahdodeID", selectedMahdode.MahdodeID));
dgMahal.ItemsSource = mahalQuery.ToList();
}
}
برای این که رویدادهای فوق درست کار کنند، اطمینان حاصل کنید که در XAML، رویدادها را به درست تعریف کرده اید:
با انجام این کار، می توانید دیتاگرید های تو در تو خود را طوری تنظیم کنید که وقتی یک ردیف را انتخاب می کنید، دیتاگرید های زیرین با داده های مرتبط بارگذاری شوند.
اگر سوال بیشتری دارید یا نیاز به راهنمایی بیشتر دارید، در خدمت شما هستم!
دوستان کسی راه کاروپیشنهادی ندارید؟
بنظرم بهتره از کمبوباکس در سلولهای DataGrid در Wpf استفاده کنید. چون دیتاگرید تو در تو زیاد منطقی نیست.
مثلا لیست استانها رو دارید در یک جدول. یک ستون به نام شهرها ایجاد کنید که محتویاتش یک کمبوباکس هست شامل شهرهای اون استان. پیاده سازی این مکانیزم خیلی ساده تره تا ۲ تا datagrid تو درتو
توی گوگل این سرچ رو کنید
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول