DataBinding:'System.Char'不包含名为Customer的属性

时间:2016-03-21 05:27:27

标签: c# data-binding

 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的属性。

我需要改变什么?

3 个答案:

答案 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在这种情况下效率不高。最佳选择是为具有nameid属性的客户创建一个类,然后从输入数据创建一个List并将其绑定到列表。此处的文件格式未知,并且未提供有关该文件的任何详细信息。所以这里我向您展示如何从List中绑定列表框的一个示例;

        List<string> strList = File.ReadAllLines(@"C:\Users\Sujith\Desktop\sujith\Allcredentials.txt").ToList();
        ListBox1.DataSource = strList;
        ListBox1.DataBind();