为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Web 窗体上使用 WCF 服务并使用 WCF 返回的 List<T> 填充

如何在 Web 窗体上使用 WCF 服务并使用 WCF 返回的 List<T> 填充

C#
GCT1015 2022-12-31 13:54:09
我正在尝试在网页上使用服务,但项目符号列表打印"ASPWebApp.CottagesServiceReference.Cottages"或System.collections.Generic.List 1. 显然,我希望它显示从服务的选择查询中获取的项目。   protected void BtnID_Click(object sender, EventArgs e)    {        int id = Convert.ToInt32(TextBoxID.Text);        try        {            List<ASPWebApp.CottagesServiceReference.Cottages> cottages = ws.GetCottageInfoByID(id).ToList();            ListItem cottage = new ListItem(String.Join(".", cottages));            BulletedList1.Items.Add(cottage);            BulletedList1.DataSource = cottages;            BulletedList1.DataBind();        }        catch (Exception a)        {            Console.WriteLine(a);        }    }服务public List<Cottages> GetCottageInfoByID(int id)    {        List<Cottages> cottage = new List<Cottages>();        SqlConnection conn = new SqlConnection(dataSource);        string sqlQuerySelectCottageInfo = "SELECT Cottage_Name as 'Name', Cottage_Location as Location, No_Of_Rooms as Rooms, Description, Cost_Per_Night as Cost FROM dbo.Cottages where Cottage_ID = @id";        SqlCommand cmd = new SqlCommand(sqlQuerySelectCottageInfo);        cmd.Parameters.AddWithValue("@id", id);        conn.Open();        cmd.Connection = conn;        SqlDataReader reader = cmd.ExecuteReader();        while (reader.Read())        {            if (!reader.HasRows)            {                throw new Exception("No Cotteges Found");            }            else            {                cottage.Add(new Cottages()                {                    Name = (reader[("Name")].ToString()),                    Location = (reader[("Location")].ToString()),                    Rooms = Convert.ToInt32(reader[("Rooms")]),                    Cost = Convert.ToDecimal(reader[("Cost")]),                    Description = (reader[("Description")].ToString()),                });            }        }        reader.Close();        conn.Close();        return cottage;    }
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

这是关于 web form 的问题,当你想在 bulletedlist 中显示自定义类的属性时,你应该将 bulletedlist 的 DataTextField 设置为该属性的名称。


  protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            List<Cottages> list = new List<Cottages>();

            list.Add(new Cottages { MyText = "text1", MyValue = "value1" });

            list.Add(new Cottages { MyText = "text2", MyValue = "value2" });

            list.Add(new Cottages { MyText = "text3", MyValue = "value3" });


           ***BulletedList1.DataTextField = "MyText";***

            BulletedList1.DataSource = list;

            BulletedList1.DataBind();

        }

    }



public class Cottages{

    public string MyValue { get; set; }

    public string MyText { get; set; }

}


查看完整回答
反对 回复 2022-12-31
?
倚天杖

TA贡献1828条经验 获得超3个赞

btnID_Click您在处理程序中有逻辑错误。


protected void BtnID_Click(object sender, EventArgs e)

{

    int id = Convert.ToInt32(TextBoxID.Text);

    try

    {

        List<ASPWebApp.CottagesServiceReference.Cottages> cottages = 

           ws.GetCottageInfoByID(id);//.ToList(); it is List<Cottages> already 


        //the next line makes no sense 

        //ListItem cottage = new ListItem(String.Join(".", cottages));


        //What should work

        foreach(Cottages cottage in cottages)

        {

           ListItem li = new ListItem(string.Format("{0}, {1} rooms", cottage.Name, cottage.Rooms)); //add more properties of the cottage here

           BulletedList1.Items.Add(li);

        }


        //no need

        //BulletedList1.DataSource = cottages;

        //BulletedList1.DataBind();



    }

    catch (Exception a)

    {

        //there is no visible console in WebForm application

        //Console.WriteLine(a);

       Trace.Write(a);

    }

}

通常,BulletedList不是绑定复杂结构的最佳选择。

我会推荐DataList或Repeater有ItemTemplate。


查看完整回答
反对 回复 2022-12-31
  • 2 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信