C# 列表到数据表。数据表不';不显示任何值
我正在尝试制作一个“历史页面”。将用户访问过的URL作为字符串读取,并将其添加到列表中,然后将其转换为DataTable,但当我单击ShowHistory菜单选项时,我得到的只是“URL”列及其下方的一个空单元格。我想我可能也不恰当地使用了Add方法 主要表格类别:C# 列表到数据表。数据表不';不显示任何值,c#,winforms,list,datatable,C#,Winforms,List,Datatable,我正在尝试制作一个“历史页面”。将用户访问过的URL作为字符串读取,并将其添加到列表中,然后将其转换为DataTable,但当我单击ShowHistory菜单选项时,我得到的只是“URL”列及其下方的一个空单元格。我想我可能也不恰当地使用了Add方法 主要表格类别: private void showHistoryToolStripMenuItem_Click(object sender, EventArgs e) { using (History history = new Histor
private void showHistoryToolStripMenuItem_Click(object sender, EventArgs e)
{
using (History history = new History())
{
history.ShowDialog();
nonHomepage = URLInput.Text;
if (String.IsNullOrEmpty(nonHomepage))
{
return;
}
else
{
addToList(nonHomepage);
}
}
}
public void addToList(string URLvalue)
{
listH.Add(URLvalue);
}
public List<string> getList()
{
return listH;
}
private void History_Load(object sender, EventArgs e)
{
Form1 br = new Form1();
list = br.listH;
DataTable table = ConvertListToDataTable(list);
dataGridView1.DataSource = table;
}
static DataTable ConvertListToDataTable(List<string> l)
{
DataTable table = new DataTable();
//int columns = 0;
table.Columns.Add("urls");
foreach(string s in l)
{
table.Rows.Add(s);
}
return table;
}
private void showHistoryToolStripMenuItem\u单击(对象发送方,事件参数e)
{
使用(历史记录=新历史记录())
{
ShowDialog();
nonHomepage=URLInput.Text;
if(String.IsNullOrEmpty(非主页))
{
返回;
}
其他的
{
addToList(非主页);
}
}
}
公共void addToList(字符串URLvalue)
{
添加(URLvalue);
}
公共列表getList()
{
返回列表;
}
历史表格类别:
private void showHistoryToolStripMenuItem_Click(object sender, EventArgs e)
{
using (History history = new History())
{
history.ShowDialog();
nonHomepage = URLInput.Text;
if (String.IsNullOrEmpty(nonHomepage))
{
return;
}
else
{
addToList(nonHomepage);
}
}
}
public void addToList(string URLvalue)
{
listH.Add(URLvalue);
}
public List<string> getList()
{
return listH;
}
private void History_Load(object sender, EventArgs e)
{
Form1 br = new Form1();
list = br.listH;
DataTable table = ConvertListToDataTable(list);
dataGridView1.DataSource = table;
}
static DataTable ConvertListToDataTable(List<string> l)
{
DataTable table = new DataTable();
//int columns = 0;
table.Columns.Add("urls");
foreach(string s in l)
{
table.Rows.Add(s);
}
return table;
}
private void History\u加载(对象发送方,事件参数e)
{
Form1 br=新的Form1();
list=br.listH;
DataTable=ConvertListToDataTable(列表);
dataGridView1.DataSource=表;
}
静态数据表ConvertListToDataTable(列表l)
{
DataTable=新的DataTable();
//int列=0;
表.列.添加(“URL”);
foreach(l中的字符串s)
{
表.行.添加;
}
返回表;
}
有什么建议吗?如果我将所有这些URL放在文件中,然后从文件中读取并写入文本框/表格,会怎么样?或者我应该改变数据结构?例如,去查字典?提前感谢。添加表行时,实际上需要添加行,而不仅仅是字符串
foreach(string s in l)
{
var row = table.NewRow();
row[0] = s;
table.Rows.Add(row);
}
return table;
另外,添加一个断点,确保列表在转换之前不是空的,并确保表在转换之后正确填充
此外,从体系结构的角度来看,如果您只有一列信息,那么您不应该真正使用
数据表
,一个列表
就足够了。在这里使用数据表是有原因的吗?在添加表行时,实际上必须添加行,而不仅仅是字符串
foreach(string s in l)
{
var row = table.NewRow();
row[0] = s;
table.Rows.Add(row);
}
return table;
另外,添加一个断点,确保列表在转换之前不是空的,并确保表在转换之后正确填充
此外,从体系结构的角度来看,如果您只有一列信息,那么您不应该真正使用
数据表
,一个列表
就足够了。在这里使用数据表是有原因的吗?在添加表行时,实际上必须添加行,而不仅仅是字符串
foreach(string s in l)
{
var row = table.NewRow();
row[0] = s;
table.Rows.Add(row);
}
return table;
另外,添加一个断点,确保列表在转换之前不是空的,并确保表在转换之后正确填充
此外,从体系结构的角度来看,如果您只有一列信息,那么您不应该真正使用
数据表
,一个列表
就足够了。在这里使用数据表是有原因的吗?在添加表行时,实际上必须添加行,而不仅仅是字符串
foreach(string s in l)
{
var row = table.NewRow();
row[0] = s;
table.Rows.Add(row);
}
return table;
另外,添加一个断点,确保列表在转换之前不是空的,并确保表在转换之后正确填充
此外,从体系结构的角度来看,如果您只有一列信息,那么您不应该真正使用
数据表
,一个列表
就足够了。在这里使用数据表
有什么原因吗?SpikeX回答的替代语法:
int i = 0;
foreach (string s in l)
{
table.Rows.Add()
tables.Rows[i].SetField("COLUMN NAME", s);
i++
}
我想您的表中只有一列,所以使用SetField可能有点过分。但是当您有多个列时,阅读起来就容易一些,而不必返回并检查哪个列有哪个索引。SpikeX答案的替代语法:
int i = 0;
foreach (string s in l)
{
table.Rows.Add()
tables.Rows[i].SetField("COLUMN NAME", s);
i++
}
我想您的表中只有一列,所以使用SetField可能有点过分。但是当您有多个列时,阅读起来就容易一些,而不必返回并检查哪个列有哪个索引。SpikeX答案的替代语法:
int i = 0;
foreach (string s in l)
{
table.Rows.Add()
tables.Rows[i].SetField("COLUMN NAME", s);
i++
}
我想您的表中只有一列,所以使用SetField可能有点过分。但是当您有多个列时,阅读起来就容易一些,而不必返回并检查哪个列有哪个索引。SpikeX答案的替代语法:
int i = 0;
foreach (string s in l)
{
table.Rows.Add()
tables.Rows[i].SetField("COLUMN NAME", s);
i++
}
我想您的表中只有一列,所以使用SetField可能有点过分。但是,当您有多个列时,阅读起来就容易一些,而不必返回并检查哪个列有哪个索引。您的问题是在
私有无效历史加载(对象发送方,事件参数e)
中创建一个空表单1
,并传入列表(该列表为空)进入方法ConvertListToDataTable(list)
,因此您的网格为空。解决方案是您必须更改历史记录
初始化或显式调用某个方法加载数据
,以加载实际列表,如下所示:
解决方案1
public partial class History : Form {
public History(){
InitializeComponent();
}
public Form1 MainForm {get;set;}
private void History_Load(object sender, EventArgs e) {
var list = MainForm == null ? new List<string>() : MainForm.listH;
DataTable table = ConvertListToDataTable(list);
dataGridView1.DataSource = table;
}
//other code ....
}
//Form1 class
private void showHistoryToolStripMenuItem_Click(object sender, EventArgs e) {
//note the MainForm initialization using Property initializer
using (History history = new History {MainForm = this}) {
history.ShowDialog();
nonHomepage = URLInput.Text;
if (String.IsNullOrEmpty(nonHomepage)) {
return;
} else {
addToList(nonHomepage);
}
}
}
公共部分类历史记录:表单{
公共历史(){
初始化组件();
}
公共表单1主表单{get;set;}
私有无效历史\u加载(对象发送方,事件参数e){
var list=MainForm==null?新列表():MainForm.listH;
DataTable=ConvertListToDataTable(列表);
dataGridView1.DataSource=表;
}
//其他代码。。。。
}
//Form1类
私有void showHistoryToolStripMenuItem\u单击(对象发送方,事件参数e){
//注意使用属性初始值设定项初始化MainForm
使用(历史记录=新历史记录{MainForm=this}){
ShowDialog();
nonHomepage=URLInput.Text;
if(String.IsNullOrEmpty(非主页)){
返回;
}否则{
addToList(非主页);
}
}
}
解决方案2
//History class
public partial class History : Form {
//define this method to call explicitly before showing your History dialog
public void LoadData(List<string> list){
DataTable table = ConvertListToDataTable(list);
dataGridView1.DataSource = table;
}
//other code ...
}
//Form1 (or Main Form) class
private void showHistoryToolStripMenuItem_Click(object sender, EventArgs e) {
using (History history = new History()) {
history.LoadData(listH);// <---- call this first to load data
history.ShowDialog();
nonHomepage = URLInput.Text;
if (String.IsNullOrEmpty(nonHomepage)) {
return;
} else {
addToList(nonHomepage);
}
}
}
//历史类
公共部分课程历史:表格{
//d