我已动态创建了一个包含两列的Grid控件,并使用第一列中数据库中的数据和第二列中的文本框控件填充其行。但最后两行网格重叠。 以下是我的代码片段。
if (comboBox1.SelectedIndex > 0)
{
// Create the Grid
Grid DynamicGrid = new Grid();
DynamicGrid.Width = 400;
DynamicGrid.HorizontalAlignment = HorizontalAlignment.Left;
DynamicGrid.VerticalAlignment = VerticalAlignment.Top;
DynamicGrid.ShowGridLines = true;
DynamicGrid.Background = new SolidColorBrush(Colors.LightSteelBlue);
//Adding columns to datagrid
ColumnDefinition gridCol1 = new ColumnDefinition();
ColumnDefinition gridCol2 = new ColumnDefinition();
DynamicGrid.ColumnDefinitions.Add(gridCol1);
DynamicGrid.ColumnDefinitions.Add(gridCol2);
// Add first column header
TextBlock txtBlock1 = new TextBlock();
txtBlock1.Text = "Particulars";
txtBlock1.FontSize = 14;
txtBlock1.FontWeight = FontWeights.Bold;
txtBlock1.Foreground = new SolidColorBrush(Colors.Green);
txtBlock1.VerticalAlignment = VerticalAlignment.Top;
Grid.SetRow(txtBlock1, 0);
Grid.SetColumn(txtBlock1, 0);
// Add second column header
TextBlock txtBlock2 = new TextBlock();
txtBlock2.Text = "Amount";
txtBlock2.FontSize = 14;
txtBlock2.FontWeight = FontWeights.Bold;
txtBlock2.Foreground = new SolidColorBrush(Colors.Green);
txtBlock2.VerticalAlignment = VerticalAlignment.Top;
Grid.SetRow(txtBlock2, 0);
Grid.SetColumn(txtBlock2, 1);
//// Add column headers to the Grid
DynamicGrid.Children.Add(txtBlock1);
DynamicGrid.Children.Add(txtBlock2);
RowDefinition gridRow;
TextBlock par;
TextBox amt;
int i = 1;
string pjt = comboBox1.SelectedItem.ToString();
//Display all the Particulars
SqlCeConnection con;
con = dbConnection();
SqlCeCommand cmd;
string sql = "select * from " + pjt;
try
{
cmd = new SqlCeCommand(sql, con);
SqlCeDataReader rdr = cmd.ExecuteReader();
int ordName = rdr.GetOrdinal("Name");
while (rdr.Read())
{
string nam = rdr.GetString(ordName);
gridRow = new RowDefinition();
gridRow.Height = new GridLength(45);
DynamicGrid.RowDefinitions.Add(gridRow);
par = new TextBlock();
par.Text = nam;
par.FontSize = 12;
par.FontWeight = FontWeights.Bold;
Grid.SetRow(par, i);
Grid.SetColumn(par, 0);
amt = new TextBox();
amt.Height = 20;
amt.Width = 190;
amt.Foreground = new SolidColorBrush(Colors.Black);
Grid.SetRow(amt, i);
Grid.SetColumn(amt, 1);
DynamicGrid.Children.Add(par);
DynamicGrid.Children.Add(amt);
i++;
}
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex);
}
this.Content = DynamicGrid;
}
我无法弄清楚为什么会出现这种重叠。 请帮帮我。
答案 0 :(得分:0)
我得到了解决方案。我刚刚在用值初始化之前添加了代码来清除子网,rowDefinition和griddefinition。
这是我使用的代码。
grid1.Children.Clear();
grid1.RowDefinitions.Clear();
grid1.ColumnDefinitions.Clear();
//Adding columns to datagrid
ColumnDefinition gridCol1 = new ColumnDefinition();
ColumnDefinition gridCol2 = new ColumnDefinition();
grid1.ColumnDefinitions.Add(gridCol1);
grid1.ColumnDefinitions.Add(gridCol2);
// Add first column header
TextBlock txtBlock1 = new TextBlock();
txtBlock1.Text = "Particulars";
txtBlock1.FontSize = 14;
txtBlock1.FontWeight = FontWeights.Bold;
txtBlock1.Foreground = new SolidColorBrush(Colors.Green);
txtBlock1.VerticalAlignment = VerticalAlignment.Top;
Grid.SetRow(txtBlock1, 0);
Grid.SetColumn(txtBlock1, 0);
// Add second column header
TextBlock txtBlock2 = new TextBlock();
txtBlock2.Text = "Amount";
txtBlock2.FontSize = 14;
txtBlock2.FontWeight = FontWeights.Bold;
txtBlock2.Foreground = new SolidColorBrush(Colors.Green);
txtBlock2.VerticalAlignment = VerticalAlignment.Top;
Grid.SetRow(txtBlock2, 0);
Grid.SetColumn(txtBlock2, 1);
//// Add column headers to the Grid
grid1.Children.Add(txtBlock1);
grid1.Children.Add(txtBlock2);
RowDefinition gridRow = new RowDefinition();
grid1.RowDefinitions.Add(gridRow);
TextBlock par;
TextBox amt;
int i = 1;
string pjt = comboBox1.SelectedItem.ToString();
//Display all the Particulars
SqlCeConnection con;
con = dbConnection();
SqlCeCommand cmd;
string sql = "select * from " + pjt;
try
{
cmd = new SqlCeCommand(sql, con);
SqlCeDataReader rdr = cmd.ExecuteReader();
int ordName = rdr.GetOrdinal("Name");
while (rdr.Read())
{
string nam = rdr.GetString(ordName);
gridRow = new RowDefinition();
gridRow.Height = new GridLength(45);
grid1.RowDefinitions.Add(gridRow);
par = new TextBlock();
par.Text = nam;
par.FontSize = 12;
par.FontWeight = FontWeights.Bold;
Grid.SetRow(par, i);
Grid.SetColumn(par, 0);
amt = new TextBox();
amt.Height = 20;
amt.Width = 190;
amt.Foreground = new SolidColorBrush(Colors.Black);
Grid.SetRow(amt, i);
Grid.SetColumn(amt, 1);
grid1.Children.Add(par);
grid1.Children.Add(amt);
i++;
}
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex);
}
我在XAML文件中放置了一个网格,而不是动态创建。然后动态添加行和列。 谢谢你的帮助。