Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从WCF填充列表框_C#_Wcf_Listview - Fatal编程技术网

C# 从WCF填充列表框

C# 从WCF填充列表框,c#,wcf,listview,C#,Wcf,Listview,我在如何从WCF填充listbox方面做了很大的努力。这是我在尝试实现WCF之前使用的旧代码: lstProcesses.BeginUpdate(); lstProcesses.Items.Clear(); while (dr.Read()) { lstProcesses.Items.Add(dr.GetString(0)); } dr.Close(); con.Close()

我在如何从WCF填充listbox方面做了很大的努力。这是我在尝试实现WCF之前使用的旧代码:

lstProcesses.BeginUpdate();
        lstProcesses.Items.Clear();
        while (dr.Read())
        {
            lstProcesses.Items.Add(dr.GetString(0));
        }
        dr.Close();
        con.Close();
        lstProcesses.EndUpdate();*/
我的新尝试代码是:

public void ShowData2()
    {

        try
        {

            ServiceReference6.Service1Client obj6 = new ServiceReference6.Service1Client();
            if (obj6.SelectSavedProcessInformation())
            {

                string passed = "";

            lstProcesses.Items.Add(obj6);

            }
            else
            {

                string failed = "";

            }
        }
        catch
        {


        }
    }
我的WCF由以下内容组成:

 public bool SelectSavedProcessInformation()
    {
       SqlConnection con = new SqlConnection(@"Data Source=localhost;Initial Catalog=WCFTest;Integrated Security=True;Pooling=False");
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT Processes FROM SaveProcesses", con);
        var result = cmd.ExecuteReader();

        if (result.HasRows)
        {
            con.Close();
            return true;
        }
        else
        {
            con.Close();
            return false;
        }
    }
    }
我很确定我在这里做错了什么,因为列表框中充满了“loging.cs.servicereference6.Service1Client”


关于如何实现wcf有什么想法吗?

通常,当我试图使用wcf从数据库获取数据时,我会将对象序列化为字符串,然后在客户端级别反序列化。从您的代码片段中,我想您应该返回一个DataTable,序列化它,然后在需要填充列表框时反序列化。我要做的是: 在IService接口中,我声明如下:

[OperationContract]
string GetDataTableFromDB();
public string GetDataTableFromDB()
{
    // your code to retrieve from DB the DataTable
    // there are plenty examples here in stackoverflow
    // I will use "retrievedDataTable" name for the retrieved table

    return Serialize<DataTable>(retrievedDataTable);        
}
在您的Service.svc.cs文件中,我将实现如下内容:

[OperationContract]
string GetDataTableFromDB();
public string GetDataTableFromDB()
{
    // your code to retrieve from DB the DataTable
    // there are plenty examples here in stackoverflow
    // I will use "retrievedDataTable" name for the retrieved table

    return Serialize<DataTable>(retrievedDataTable);        
}
在您的客户机中,我将调用拥有datatable的方法:

public void ShowData2()
{
    try
    {
        ServiceReference6.Service1Client obj6 = new ServiceReference6.Service1Client();
        DataTable table = Deserialize<DataTable>(obj6.SelectSavedProcessInformation());
        if(table != null)
        {
           foreach(DataRow row in table.Rows)
           {
               // fill the listbox
           }
        }
public void ShowData2()
{
尝试
{
ServiceReference6.Service1Client obj6=新的ServiceReference6.Service1Client();
DataTable=反序列化(obj6.SelectSavedProcessInformation());
如果(表!=null)
{
foreach(table.Rows中的DataRow行)
{
//填写列表框
}
}
我使用的序列化和反序列化代码如下:

    public class JsonHelper
{
    public static string JsonSerializer<T>(object obj)
    {
        try
        {
            if (obj == null)
                return null;

            using (MemoryStream ms = new MemoryStream())
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
                serializer.WriteObject(ms, obj);
                ms.Position = 0;

                using (StreamReader reader = new StreamReader(ms))
                {
                    return reader.ReadToEnd();
                }
            }
        }
        catch { return null; }
    }

    public static T JsonDeserialize<T>(string source)
    {
        try
        {
            if (source == null)
                return default(T);

            using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(source)))
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
                if (ms.Length == 0)
                    return default(T);

                return (T)serializer.ReadObject(ms);
            }
        }
        catch { return default(T); }
    }
}
public类JsonHelper
{
公共静态字符串JsonSerializer(对象obj)
{
尝试
{
if(obj==null)
返回null;
使用(MemoryStream ms=new MemoryStream())
{
DataContractJsonSerializer=新的DataContractJsonSerializer(obj.GetType());
serializer.WriteObject(ms,obj);
ms.Position=0;
使用(StreamReader=新StreamReader(ms))
{
返回reader.ReadToEnd();
}
}
}
catch{return null;}
}
公共静态JsonDeserialize(字符串源)
{
尝试
{
if(source==null)
返回默认值(T);
使用(MemoryStream ms=new MemoryStream(Encoding.Unicode.GetBytes(source)))
{
DataContractJsonSerializer serializer=新的DataContractJsonSerializer(typeof(T));
如果(ms.Length==0)
返回默认值(T);
return(T)serializer.ReadObject(ms);
}
}
catch{返回默认值(T);}
}
}

我从未将DataTable与序列化一起使用过,但我希望它能工作

我会试一试并让你知道。谢谢你的帮助如果你不理解某些内容,请告诉我确实可以,我只是尝试快速完成从wcf加载到文本框中的过程。一旦完成,我将尝试此解决方案:)它没有找到“Serialize”“Serialize”这只是我使用的一个名称!如果您使用的是我的JsonHelper类,您必须编写如下内容:“return JsonHelper.JsonSerializer