0

遇到了一个问题,我每天都在努力解决这个问题。我有一个包含 varchar 列和 XML 列的表。架构如下:

create table dbo.StandardView(
Name varchar(50),
Fields xml)

我插入了如下记录:

insert into dbo.StandardView
values('Standard',N'<fieldname>FirstName,SecondName,ThirdName</fieldname>')

我需要用实体填充一个列表框,如下所示:

FirstName
SecondName
ThirdName

填充编写的列表框的代码如下:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            PopulateValues();
        }
    }

public void PopulateValues()
{
    SqlDataAdapter da = new SqlDataAdapter("select * from dbo.StandardView", xconn);
    DataTable dt = new DataTable();
    da.Fill(dt);
    lstBox.DataSource = dt;
    lstBox.DataTextField = dt.Columns[1].ToString();
    lstBox.DataValueField = dt.Columns[1].ToString();
    lstBox.DataBind();

}

上面的代码将整个 xml 列以字符串格式放在列表框中,并且非常明显。

我尝试了一些 xmlserializer、deserializer 和 xmlreader 的东西,但无法相应地填充列表框。

请高手指导。

4

2 回答 2

1

创建一个具有 FirstName、SecondName、ThirdName 属性的类,当您提取 xml 列时,创建该类的列表并使用 xml 数据填充该列表,然后将该列表绑定到列表框。

于 2013-07-03T18:40:14.890 回答
0

我不明白你的 XML,但如果数据是这样的:

<Person>
    <FirstName>John</FirstName>
    <SecondName>Smith</SecondName>
    <ThirdName>Rowle</ThirdName>
</Person>

你创建一个像这样的对象:

[XmlRoot()]
public class Person
{
    public string FirstName { get; set; }
    public string SecondName { get; set; }
    public string ThirdName { get; set; }
}

然后你可以让它与XMLSerializer班级一起工作。

XmlSerializer serializer = new XmlSerializer(typeof(Person));
Person p = (Person)serializer.Deserialize(new StringReader(dt.Rows[0][1].ToString()));

然后,您可以轻松地将您的 person 对象绑定到您的列表,或者您需要将其绑定到的任何其他对象。请注意,出于测试目的,我只绑定了第一行的第二列。

于 2013-07-03T19:31:57.670 回答