C# AXL XElement Данные для таблицы данных

Я занят с приложением, которое извлекает данные из Cisco CUCM в Datagridview с AXL/SOAP.

Я получаю только последнюю запись в сетке данных, если помещаю информацию в комбинированный список, я получаю полный список. Информация, которую я извлекаю с помощью AXL: SEP0014A815DB0D sk0000101 SEP0022555E7E26 AKijkindevegte 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());
                    }

Пожалуйста, помогите Что я не так.

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;
Другие вопросы по тегам