سؤال

ولقد وجدت أن الأعمدة datagrid يمكن إنشاء وملزمة في Silverlight بشكل حيوي. ومع ذلك لا أستطيع أن أجد وسيلة لربط البيانات لهذه الأعمدة.

إذا وأنا أحاول أن ربط أي نوع من الكائن مع AutoGenerateColumns = صحيح، ثم أسماء كل خاصية الكائن الحصول على إضافة كأعمدة ويتم عرض المعلومات الكائن في الشبكة بالإضافة إلى الأعمدة القائمة التي تظهر أية بيانات.

إذا كنت تطبيق القائمة مع AutoGenerateColumns = كاذبة، وبعد ذلك لا يزال الحصول على الصفوف لتظهر في الجدول ولكن لا توجد بيانات في الأعمدة.

وأنا لا أريد أن إنشاء كائن معين لكل حالة أنني بحاجة لعرض البيانات في datagird.

وأنا لا أريد أن يكون أسماء مقالي تقتصر على أسماء من الخصائص، مثل أسماء مع مسافات بها.

وأريد أن أكون قادرة على ربط قائمة أو مجموعة القاموس على شبكة البيانات. وأريد أيضا أن تكون قادرة على السيطرة على ما يظهر بيانات تصل في ما الأعمدة.

هل كانت مفيدة؟

المحلول

وافترض لديك فئة أو بعض الحاويات الأخرى التي ترغب في ربط المعلومات، يمكنك القيام بما يلي.

DataGridTextColumn product = new DataGridTextColumn();
                product.Binding = new System.Windows.Data.Binding("Product");
                product.Header = "Product";

                DataGridTextColumn date = new DataGridTextColumn();
                date.Binding = new System.Windows.Data.Binding("Date");
                date.Header = "Date";

                DataGridTextColumn version = new DataGridTextColumn();
                version.Binding = new System.Windows.Data.Binding("FileVersion");
                version.Header = "Version";

                DataGridTextColumn timestamp = new DataGridTextColumn();
                timestamp.Header = "TimeStamp";
                timestamp.Binding = new System.Windows.Data.Binding("TimeStamp");

                DataGridTextColumn user = new DataGridTextColumn();
                user.Header = "User";
                user.Binding = new System.Windows.Data.Binding("User");

                rpdata.Columns.Add(product);
                rpdata.Columns.Add(date);
                rpdata.Columns.Add(version);
                rpdata.Columns.Add(timestamp);
                rpdata.Columns.Add(user);

والآن مجرد مجموعة itemsource الخاص بك من DataGrid إلى مجموعة من العناصر لديك.

وهذا يسمح لك لتعيين رأس تريد عرضها، ويربط أيضا المعلومات إلى المتغيرات في الحاوية، وبالتالي فإنه يعرض المعلومات من الأعمدة فقط إضافة.

نصائح أخرى

وربما كنت هناك تقريبا ولكن فقط لديهم شيئا خاطئا بمهارة في XAML الخاص بك، وهنا مثال العمل:

<UserControl x:Class="Testproject.EditableDataGrid"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" Background="White">
        <data:DataGrid x:Name="myDataGrid" AutoGenerateColumns="False"> 
            <data:DataGrid.Columns>
                <data:DataGridTextColumn Header="My text" Binding="{Binding StringValue}" />
                <data:DataGridCheckBoxColumn Header="Check Box" Binding="{Binding IsChecked}" />
                <data:DataGridTemplateColumn Header="A template column">
                    <data:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Rectangle Width="20" Height="5" Fill="Red"/>
                            <TextBlock Text="{Binding IntValue}" />
                        </StackPanel>
                    </DataTemplate>
                </data:DataGridTemplateColumn.CellTemplate>

            </data:DataGridTemplateColumn>
                <data:DataGridTextColumn Header="My int" Binding="{Binding IntValue}" />
            </data:DataGrid.Columns>
        </data:DataGrid>
    </Grid>
</UserControl>

using System.Windows;
using System.Windows.Controls;
using System.Collections.Generic;

namespace Testproject
{
    public partial class EditableDataGrid   :UserControl
    {
        public EditableDataGrid()
        {
            InitializeComponent();

            myDataGrid.ItemsSource = new List<ClassForDataGridTest>()
                            {
                                new ClassForDataGridTest() {StringValue="hello", IntValue=21, IsChecked=false}
                                , new ClassForDataGridTest() {StringValue="the second", IntValue=122, IsChecked = true}
                            };
        }
    }

    public class ClassForDataGridTest   : DependencyObject
    {

        public string StringValue {get; set;}

        public int IntValue {get; set;}

        public bool IsChecked { get; set; }

    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top