Как упоминалось в ОП, он хочет использовать нестандартный User-control
, вот XAML для образца User-Control
, который может представлять Data-Row
.
<UserControl x:Class="MyDatarow"
......>
<Grid x:Name="ItemHolder" Height="30" x:FieldModifier ="Public">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20*" /> <!--Create as many column as you want during design time,or you can simply create it dynamically -->
<ColumnDefinition Width="20*" /><!--Now here i am setting the Width to 20*,instead of this you can set a MinWidth and MaxWidth if you want , i recommend it too-->
<ColumnDefinition Width="20*" />
<!--When i write the c# code,i will consider that no column were added here during design time-->
</Grid.ColumnDefinitions>
Теперь давайте представим егокак DataGrid
. Предположим, что данные поступают из базы данных, тогда мы можем использовать IDataReader
, а также VirtualizingStackPanel
для достижения datagrid
вида:
<VirtualizingStackPanel x:Name="MydataGrid" VerticalAlignment="Stretch" Height="0"/> <!--Now here i am setting the height to 0,the reason will be explained afterwards-->
C #
SqlConection con=new SqlConnection("connection string here")
SqlCommand cmd = new SqlCommand("Select * from table",con)
SqlDatareader dr = cmd.ExecuteReader();
While (dr.Read())
{
MyDatarow row = new MyDatarow;
If (row.ItemHolder.ColumnDefinition.Count = 0)
{
row.ItemHolder.ColumnDefinition.Add(new ColumnDefinition)//this will ad required number of columns which will represent the cells
}
TextBox txtbx = new TextBox;
txtbx.Height = 20
row.ItemHolder.Children.Add(txtbx)
Grid.SetColumn(txtbx,1) /// here 1 is the column count, change it as you want :)
MyDatagrid.Childer.Add(row);
MyDatagrid.height = MyDatagrid.height + 30 ;
}
Надеюсь, это решит вашу проблему:)