在WPF C#中填充Postgres数据库中的ListView

时间:2017-03-29 04:49:39

标签: c# wpf xaml listview

美好的一天!

我正在使用 WPF C#Visual Studio 2012 。我在我的xaml中有一个Listview,如:

          <ListView 
                Name="listview" 
                Grid.Column="0"                
                Grid.ColumnSpan="2" 
                Grid.Row="1"
                Grid.RowSpan="15"
                Margin="5"
                BorderThickness="0"
                Background="WhiteSmoke">
                <ListView.View>
                    <GridView>
                        <GridView.Columns>
                            <GridViewColumn 
                                Header="column1" 
                                DisplayMemberBinding="{Binding path}" />
                            <!--other path-->
                        </GridView.Columns>
                    </GridView>
                </ListView.View>
            </ListView>

填充此Listview的代码(在xaml.cs中):

        NpgsqlConnection connection = new NpgsqlConnection("Server = " + myModule.Server + ";Port = " + myModule.Port + ";User ID = " + myModule.UserID + ";Password = " + myModule.Password + ";Database = " + myModule.Database);
        connection.Open();
        NpgsqlCommand command = new NpgsqlCommand("select * from tblstudents_secure order by stud_id ASC", connection);

        command.Connection = connection;
        NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(command);


        DataSet ds=new DataSet ();
        adapter.Fill(ds);
        listview.ItemsSource = ds.Tables[0].DefaultView;

当我运行我的程序时,我知道它填充了listview,因为当我将鼠标悬停在那个上面时我可以看到它的行,但我看不到任何文本在这些行上!

我错过了什么?

先谢谢。

快乐的编码!

2 个答案:

答案 0 :(得分:2)

谢谢大家的意见和建议。经过十年的网络搜索(开玩笑),我找到了这个解决方案:

在我的XAML中

           <ListView 
                Margin="10" 
                Name="lvDataBinding">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Student Number" Width="100" DisplayMemberBinding="{Binding list_studid}" />
                        <GridViewColumn Header="First Name" Width="100" DisplayMemberBinding="{Binding list_studfname}" />
                        <GridViewColumn Header="Middle Name" Width="100" DisplayMemberBinding="{Binding list_studmname}" />
                        <GridViewColumn Header="Last Name" Width="100" DisplayMemberBinding="{Binding list_studlname}" />
                    </GridView>
                </ListView.View>
            </ListView>

在我的XAML.CS

   public class User
    {
        public string list_studid { get; set; }
        public string list_studfname { get; set; }
        public string list_studmname { get; set; }
        public string list_studlname { get; set; }


    }


   public void cmdSearch_Click(object sender, RoutedEventArgs e)
   {
        NpgsqlConnection iConnect = new NpgsqlConnection
                                        ("Server = " + myModule.Server + ";
                                          Port = " + myModule.Port + ";
                                          User ID = " + myModule.UserID + ";
                                          Password = " + myModule.Password + ";
                                          Database = " + myModule.Database);
        iConnect.Open();
        NpgsqlCommand iQuery = new NpgsqlCommand("Select * from tblstudents_secure", iConnect);
        iQuery.Connection = iConnect;
        NpgsqlDataAdapter iAdapter = new NpgsqlDataAdapter(iQuery);

        DataSet iDataSet = new DataSet();
        iAdapter.Fill(iDataSet, "LIST");

        int lstCount = iDataSet.Tables["LIST"].Rows.Count;//lstCount holds the total count of the list from database

        int i = 0;//used as counter
        List<User> items = new List<User>();
        while (lstCount > i)
        {

            items.Add(new User()
            {
                list_studid = iDataSet.Tables["LIST"].Rows[i]["stud_id"].ToString(),
                list_studfname = iDataSet.Tables["LIST"].Rows[i]["stud_fname"].ToString(),
                list_studmname = iDataSet.Tables["LIST"].Rows[i]["stud_mname"].ToString(),
                list_studlname = iDataSet.Tables["LIST"].Rows[i]["stud_lname"].ToString()
            });

            lvDataBinding.ItemsSource = items;//lvDataBinding is the name of my ListView

            i++;
        }

   }

说明:

在我的设计(XAML)中,DisplayMemberBinding的{​​{1}}属性包含绑定列表,后面的代码是GridViewColumn。现在,我们有一个捕手&#34;在我们的设计上,我们设置了#34; thrower&#34;从我们的代码背后。

list_studid, list_studfname, list_studmname, list_studlname保存并初始化绑定列表 - list_studid,list_studfname等...

当我的按钮(cmdSearch)上有用户public class User时,我们调用数据库,打开它,执行选择查询,将其填充到数据集中,然后循环直到列表末尾。

现在&#34;投掷者&#34;从循环开始,包括CLICK。循环时,list_studid,list_studETC ...保存数据库List<User> items = new List<User>();中的数据并将其转换为字符串( .ToString())。

然后我们&#34;扔&#34;它到(list_studid = iDataSet.Tables["LIST"].Rows[i]["stud_id"].ToString())的列表视图。正如我所说,设计(XAML)&#34; 捕获&#34;这个&#34; 抛出&#34;,并将其加载到列表视图。

对于那些偶然发现这个问题的人来说,这是我自己的解释 - 我不知道我在技术上是对还是错,如果我错了,请纠正我^ _ ^。< / p>

很抱歉这篇文章很长,以下是您的代码马铃薯: lvDataBinding.ItemsSource = items;

快乐的编码!

答案 1 :(得分:0)

很难帮助您了解有关您实体的这些小信息...... 但我敢打赌,你的数据库中的实体没有path属性。

这个例子对我有用:

   <ListView 
            Name="listview" 
            Grid.Column="0"                
            Grid.ColumnSpan="2" 
            Grid.Row="1"
            Grid.RowSpan="15"
            Margin="5"
            BorderThickness="0"
            Background="WhiteSmoke">
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn 
                            Header="column1" 
                            DisplayMemberBinding="{Binding Path}" />
                    <!--other path-->
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>

代码隐藏:

   public partial class MainWindow : Window
   {
    public MainWindow()
   {
       InitializeComponent();
       var bla = new ObservableCollection<Car>()
       {
          new Car()
       };

       listview.ItemsSource = bla;
   }
 }

 public class Car
 {
   public Car()
  {
     Path = "bla";
  }
   public string Path { get; set; }
 }

注意我的Path课程中的属性Car和该行 视图中的DisplayMemberBinding="{Binding Path}"

问候