protected void Button_Upload_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Data/" + FileUpload1.FileName));
}
string path = Server.MapPath("~/Data/" + FileUpload1.FileName);
string[] readtext = File.ReadAllLines(path);
StringBuilder strbuild = new StringBuilder();
foreach (string s in readtext)
{
strbuild.Append(s);
strbuild.AppendLine();
}
ListBox1.DataValueField = strbuild.ToString();
ListBox1.DataTextField = strbuild.ToString();
ListBox1.DataSource = strbuild.ToString();
ListBox1.DataBind();
我在这里上传包含客户详细信息的文件。当我选择文件时,它显示错误,如
DataBinding:'System.Char'不包含名称为XXX的属性。
我需要改变什么?
答案 0 :(得分:0)
DataBinding无法正常工作。你必须创建List然后存储它的每一行
List<string> strList = new List<string>();
foreach (string s in readtext)
{
strbuild.Add(s);
}
ListBox1.DataSource = strList;
ListBox1.DataBind();
或者您可以简单地将字符串数组放在您阅读的内容中
ListBox1.DataSource = readText;
答案 1 :(得分:0)
Gilang
的答案应该有效,但是有一个特殊的类设计用于绑定 - BindingList。您的代码应如下所示:
var bindingList = new BindingList<string>(readText);
ListBox1.DataSource = bindingList;
ListBox1.DataBind();
因此,列表框的项目列表中的所有更改(添加或删除)都在数据源中正确捕获 - 您实际拥有two way binding
。
注意:尝试为变量使用有意义的名称,否则代码在增长时将变得非常难以阅读:
`ListBox1` -> `lstCustomers` or `CustomersList`
`readText` -> `readLines` or `customerNames`
答案 2 :(得分:0)
我认为StringBuilder在这种情况下效率不高。最佳选择是为具有name
和id
属性的客户创建一个类,然后从输入数据创建一个List并将其绑定到列表。此处的文件格式未知,并且未提供有关该文件的任何详细信息。所以这里我向您展示如何从List中绑定列表框的一个示例;
List<string> strList = File.ReadAllLines(@"C:\Users\Sujith\Desktop\sujith\Allcredentials.txt").ToList();
ListBox1.DataSource = strList;
ListBox1.DataBind();