【问题标题】:C# Display All Members of a ListC# 显示列表的所有成员
【发布时间】:2016-11-23 20:39:26
【问题描述】:

我有一个 WCF 服务和一个 Windows 窗体。单击表单上的按钮时,我希望通过服务填充一个列表(包含 4 个成员)。然后,我希望将列表显示在 From 上,其中 4 个成员作为列。

更好的是,我想将每个成员都显示为文本框的一部分。

现在,我只能在单独的列表框中显示每个成员。

这里是代码。 GateInfo.cs:

using System.Runtime.Serialization;

namespace JimWcfFormTest3
{
    [DataContract]

    public class GateInfo
    {
        [DataMember]
        public int carid { get; set; }

        [DataMember]
        public int paid_at_gate { get; set; }

        [DataMember]
        public int wash_pkg_purch { get; set; }

        [DataMember]
        public string carte { get; set; }
    }
}

Service1.cs:

using System.Collections.Generic;
using System.ServiceModel;

namespace JimWcfFormTest3
{
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class Service1 : IService1
    {
        private List<GateInfo> _gate;

        private Service1()
        {
            _gate = new List<GateInfo>();
        }

        public void Gate_to_Server(GateInfo gatein)
        {
            if (gatein != null) _gate.Add(gatein);
        }

        public List<GateInfo> Server_to_Term()
        {
            return _gate;
        }
    }
}

Form1.cs:

private void button1_Click(object sender, EventArgs e)
{
    int carnum = 2;
    int pay = 1;
    int wash = 5;
    string txt = "TEST";
    var data_out = new GateInfo { carid = carnum, paid_at_gate = pay, wash_pkg_purch = wash, carte = txt };

    server.Gate_to_Server(data_out);

    listBox1.DisplayMember = "carid";
    listBox1.DataSource = server.Server_to_Term();

    listBox4.DisplayMember = "paid_at_gate";
    listBox4.DataSource = server.Server_to_Term();

    listBox5.DisplayMember = "wash_pkg_purch";
    listBox5.DataSource = server.Server_to_Term();

    listBox6.DisplayMember = "carte";
    listBox6.DataSource = server.Server_to_Term();
}

理想情况下,我想在一个文本框中显示所有内容,如下所示:

“时间戳:Car=carid, Pay=paid_at_gate, Package =wash_pkg_purch, Ala Carte=carte”

【问题讨论】:

  • 在表单上删除DataGridView,然后将列表设置为控件的DataSource,例如dataGridView1.DataSource = server.Server_to_Term();
  • 另外,如果您想在单个列中精确显示timestamp: Car=carid, Pay=paid_at_gate, Package = wash_pkg_purch, Ala Carte=carte,只需覆盖GateInfo 类的ToString() 方法并返回所需的格式。
  • @RezaAghaei:感谢您的帮助!我快到了。我有一个跟进:当我将覆盖添加到我的 GateInfo 类并在我的表单中执行此操作时:GateInfo data_out = new GateInfo { carid = carnum, paid_at_gate = pay, wash_pkg_purch = wash, carte = txt }; textBox1.AppendText(Environment.NewLine + data_out.ToString() + Environment.NewLine); 它仍然返回:WindowsFormsApplication1.JimTestServiceRef.GateInfo我做错了什么?跨度>

标签: c# winforms list wcf textbox


【解决方案1】:

@RezaAghaei 回答了最初的问题:

在表单上放置一个 DataGridView,然后将一个列表设置为 控件,例如 dataGridView1.DataSource = server.Server_to_Term()

这里回答了如何将这一切都放在一个文本框中的问题: How to Override ToString and Display in a textBox

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多