【问题标题】:c# AXL XElement Data to datagridviewc# AXL XElement 数据到datagridview
【发布时间】:2015-06-23 06:46:13
【问题描述】:

我正忙于使用 AXL/SOAP 将数据从 Cisco CUCM 提取到 Datagridview 的应用程序。

如果我将信息放到组合框中,我只会得到 datagridview 中的最后一条记录,我会得到完整的列表。 我用 AXL 提取的信息是: SEP0014A815DB0D sk0000101 SEP0022555E7E26 阿金德韦格特 SEP0018BAC8C6C5 BT101139

这是我的代码:

            byte[] soapBytes = Encoding.UTF8.GetBytes(soap);

            ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };
            HttpWebRequest httpRQ = (HttpWebRequest)HttpWebRequest.Create(string.Format(@"https://XXX.XXX.XXX.XXX:8443/axl/"));

            httpRQ.ProtocolVersion = System.Net.HttpVersion.Version10;
            httpRQ.Credentials = new NetworkCredential("user1", "password");//Callmanager gebruikersnaam / password
            httpRQ.Method = "POST";
            httpRQ.ContentType = "text/xml; charset=utf-8";
            httpRQ.Accept = "text/xml";
            httpRQ.Headers.Add("SOAPAction: 'CUCM:DB ver=" + version + "'");
            httpRQ.ContentLength = soapBytes.Length;

            //Send the xml soap to cucm
            Stream stm = httpRQ.GetRequestStream();
            stm.Write(soapBytes, 0, soapBytes.Length);
            stm.Close();

            //Build the xml response
            XDocument responcedoc = new XDocument();
            HttpWebResponse responce = httpRQ.GetResponse() as HttpWebResponse;
            Stream responcedata = responce.GetResponseStream();
            StreamReader responsereader = new StreamReader(responcedata);
            Logging.Text += "\n---------|AXL Response|---------\n\n";
            XDocument respdoc = XDocument.Load(responsereader);
            Logging.Text += respdoc + "\n";
            soap = null;

            //fill in the combo  

            DevicePhone.Items.Clear();




            foreach (XElement item in respdoc.Descendants("name"))

            {
               // DataSet ds = new DataSet();
                //ds.ReadXml((string)item);

                DevicePhone.Items.Add((string)item);
                string ds;


                    strDevicePhone = ((string)item);
                    ds = ((string)item);
                    label3.Text = strDevicePhone;

                    try
                    {


                        DataTable jmn = new DataTable("respdoc");

                        dataGridView1.DataSource = jmn;

                        jmn.Columns.Add("name");
                        jmn.Columns.Add("userid");

                        jmn.Rows.Add((string)item);

                        return;
                    }
                    catch (Exception e)
                    {
                        //Interaction.MsgBox(ex.ToString());
                    }

请帮忙 我哪里错了。

【问题讨论】:

    标签: c# soap xelement cisco-axl


    【解决方案1】:

    您正在为每个元素创建一个新的DataTable,并将其分配给您的DataGridView.DataSource。可以预见的是,这将导致设置包含最后一项的源。

    DataTable 的创建移到循环之外并在其中添加行。然后在完成填充后分配一次DataSource

    var jmn = new DataTable("respdoc");
    jmn.Columns.Add("name");
    jmn.Columns.Add("userid");
    
    foreach (var item in respdoc.Descendants("item"))
    {
        // ...
    
        jmn.Rows.Add((string)item);
    
        // ...
    }
    
    dataGridView1.DataSource = jmn;
    

    【讨论】:

    • 您好 Charles,您提供的解决方案运行良好。最后一件事是我有 SEP000000001234hansom,我都想放入 Datagridview。感谢提前一月
    • 我猜是因为我没有你的 XML,但试试Rows.Add(new object[]{(string)item.Element("name"), (string)item.Element("userid")})
    • 嗨,查尔斯,如果 datagridview 中有飞蛾项目,但唯一剩下的就是在两条记录之间我有 2 个空行。感谢到目前为止
    • 最可能的原因是您的 XML 中有 2 个 item 元素没有 nameuserid 元素,或者它有这些元素并且它们是空的。
    • SEP0014A815DB0Dsk0000101SEP0022555E7E26AKijkindevegte SEP0022555E7F45BP510210 SOAP-ENV:信封>
    猜你喜欢
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    相关资源
    最近更新 更多