C#以编程方式添加到DataGrid控件会导致空白列

C#以编程方式添加到DataGrid控件会导致空白列,c#,.net,datagrid,C#,.net,Datagrid,这是我第一次使用C#DataGrid控件(也是我的第一个C#项目之一),我很难用编程方式填充DataGrid控件。每次我添加一行和两列时,它们都是空的 XAML代码 <DataGrid ItemsSource="{Binding}" x:Name="resultsDataGrid" HorizontalAlignment="Left" Margin="10,454,0,0" VerticalAlignment="Top" Height="199" Width="499">

这是我第一次使用C#DataGrid控件(也是我的第一个C#项目之一),我很难用编程方式填充DataGrid控件。每次我添加一行和两列时,它们都是空的

XAML代码

<DataGrid ItemsSource="{Binding}" x:Name="resultsDataGrid"  HorizontalAlignment="Left" Margin="10,454,0,0" VerticalAlignment="Top" Height="199" Width="499">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Url"/>
        <DataGridTextColumn Header="404"/>
    </DataGrid.Columns>
</DataGrid>

我一直在看示例,我可以看到您必须绑定到数据集/数据库/源,但当我以编程方式添加这些时,我不知道如何做到这一点?我做错了什么?

DataGrid有一个名为
AutoGenerateColumns
的属性,默认为true。这将自动为每个属性创建一列,标题为属性名称。但是,因为您使用的是匿名类型,所以没有属性名。这就是你的空白栏的来源

解决方案是将
AutoGenerateColumns=“False”
添加到
参数中。

尝试以下操作:

XAML代码:

<Grid Height="396" Name="grid1" Width="565">
    <DataGrid AutoGenerateColumns="False" Height="170" HorizontalAlignment="Left" Margin="12,85,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="541" />
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="12,37,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</Grid>

CS代码:

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            // Add Columns to the dataGrid
            DataGridTextColumn c1 = new DataGridTextColumn();
            c1.Header = "Person ID";
            c1.Binding = new Binding("ID");
            c1.Width = 110;
            dataGrid1.Columns.Add(c1);

            DataGridTextColumn c2 = new DataGridTextColumn();
            c2.Header = "First Name";
            c2.Width = 110;
            c2.Binding = new Binding("FirstName");
            dataGrid1.Columns.Add(c2);

            DataGridTextColumn c3 = new DataGridTextColumn();
            c3.Header = "Last Name";
            c3.Width = 110;
            c3.Binding = new Binding("LastName");
            dataGrid1.Columns.Add(c3);

            // Create the Data
            List<Person> myData = new List<Person>();
            myData.Add(new Person() { ID = 5, FirstName = "Jamie", LastName = "White" });
            myData.Add(new Person() { ID = 10, FirstName = "Mike", LastName = "Smith" });
            myData.Add(new Person() { ID = 25, FirstName = "Joe", LastName = "Yang" });

            // Pass the data to the dataGrid
            dataGrid1.ItemsSource = myData;

            //// OR

            //dataGrid1.Items.Add(new Person() { ID = 5, FirstName = "Jamie", LastName = "Weir" });
            //dataGrid1.Items.Add(new Person() { ID = 10, FirstName = "Mike", LastName = "Smith" });
            //dataGrid1.Items.Add(new Person() { ID = 25, FirstName = "Joe", LastName = "Yang" });

            // Modify a cell
            ((Person)dataGrid1.Items[1]).LastName = "Schmidt";

        }
    }

    public class Person
    {
        public int ID { set; get; }
        public string FirstName { set; get; }
        public string LastName { set; get; }
    }


}
命名空间WpfApplication1
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,路由目标)
{
//向dataGrid添加列
DataGridTextColumn c1=新DataGridTextColumn();
c1.Header=“个人ID”;
c1.绑定=新绑定(“ID”);
c1.宽度=110;
dataGrid1.Columns.Add(c1);
DataGridTextColumn c2=新的DataGridTextColumn();
c2.Header=“名字”;
c2.宽度=110;
c2.绑定=新绑定(“名字”);
dataGrid1.Columns.Add(c2);
DataGridTextColumn c3=新的DataGridTextColumn();
c3.Header=“姓氏”;
c3.宽度=110;
c3.绑定=新绑定(“姓氏”);
dataGrid1.Columns.Add(c3);
//创建数据
List myData=new List();
添加(newperson(){ID=5,FirstName=“Jamie”,LastName=“White”});
添加(newperson(){ID=10,FirstName=“Mike”,LastName=“Smith”});
添加(newperson(){ID=25,FirstName=“Joe”,LastName=“Yang”});
//将数据传递到dataGrid
dataGrid1.ItemsSource=myData;
////或
//dataGrid1.Items.Add(newperson(){ID=5,FirstName=“Jamie”,LastName=“Weir”});
//dataGrid1.Items.Add(newperson(){ID=10,FirstName=“Mike”,LastName=“Smith”});
//dataGrid1.Items.Add(newperson(){ID=25,FirstName=“Joe”,LastName=“Yang”});
//修改单元格
((个人)dataGrid1.Items[1]).LastName=“Schmidt”;
}
}
公共阶层人士
{
公共int ID{set;get;}
公共字符串名{set;get;}
公共字符串LastName{set;get;}
}
}

感谢您的输入,但不幸的是,这似乎不起作用。
namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            // Add Columns to the dataGrid
            DataGridTextColumn c1 = new DataGridTextColumn();
            c1.Header = "Person ID";
            c1.Binding = new Binding("ID");
            c1.Width = 110;
            dataGrid1.Columns.Add(c1);

            DataGridTextColumn c2 = new DataGridTextColumn();
            c2.Header = "First Name";
            c2.Width = 110;
            c2.Binding = new Binding("FirstName");
            dataGrid1.Columns.Add(c2);

            DataGridTextColumn c3 = new DataGridTextColumn();
            c3.Header = "Last Name";
            c3.Width = 110;
            c3.Binding = new Binding("LastName");
            dataGrid1.Columns.Add(c3);

            // Create the Data
            List<Person> myData = new List<Person>();
            myData.Add(new Person() { ID = 5, FirstName = "Jamie", LastName = "White" });
            myData.Add(new Person() { ID = 10, FirstName = "Mike", LastName = "Smith" });
            myData.Add(new Person() { ID = 25, FirstName = "Joe", LastName = "Yang" });

            // Pass the data to the dataGrid
            dataGrid1.ItemsSource = myData;

            //// OR

            //dataGrid1.Items.Add(new Person() { ID = 5, FirstName = "Jamie", LastName = "Weir" });
            //dataGrid1.Items.Add(new Person() { ID = 10, FirstName = "Mike", LastName = "Smith" });
            //dataGrid1.Items.Add(new Person() { ID = 25, FirstName = "Joe", LastName = "Yang" });

            // Modify a cell
            ((Person)dataGrid1.Items[1]).LastName = "Schmidt";

        }
    }

    public class Person
    {
        public int ID { set; get; }
        public string FirstName { set; get; }
        public string LastName { set; get; }
    }


}