美好的一天!
我正在使用 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,因为当我将鼠标悬停在那个上面时我可以看到它的行,但我看不到任何文本在这些行上!
我错过了什么?
先谢谢。
快乐的编码!
答案 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}"
。
问候