заполнить LINQ to XML в Grdiview - PullRequest
       3

заполнить LINQ to XML в Grdiview

1 голос
/ 14 сентября 2011

Я пытаюсь использовать LINQ для заполнения GridView.Мой XML выглядит так:

      <?xml version="1.0" ?> 
- <!-- Created @ 9/14/2011 1:16:52 PM
  --> 
- <DoctorList>
- <Doctor ID="1" Specialist="Dentist">
  <Username>Ahmed</Username> 
  <Password>12345</Password> 
  </Doctor>
- <Doctor ID="2" Specialist="oculist">
  <Username>Aya</Username> 
  <Password>12345</Password> 
  </Doctor>
- <Doctor ID="3" Specialist="surgery">
  <Username>malak</Username> 
  <Password>12345</Password> 
  </Doctor>
  </DoctorList>

Я использую следующий код:

IEnumerable<XElement> matches = from Doctor in doc.Descendants("Doctor") where (int)Doctor.Attribute("ID") > 1 select Doctor;
GridView1.DataSource= matches;
       GridView1.DataBind();

Это возвращает ошибку, что столбец "специалист" не найден.Я хочу отобразить специалиста, атрибут id и все внутренние элементы.Мой gridview выглядит так:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"  
            CellPadding="4" HeaderStyle-BackColor="blue" HeaderStyle-ForeColor="White" 
            HeaderStyle-HorizontalAlign="Center" HeaderStyle-Font-Bold="True" 
            ondatabound="GridView1_DataBound">
            <Columns>  
            <asp:BoundField HeaderText="Specialist" DataField="Specialist" /> 
            <asp:BoundField HeaderText="ID" DataField="ID" ItemStyle-HorizontalAlign="Right" />
            <asp:BoundField HeaderText="Username" DataField="Username" ItemStyle-HorizontalAlign="Right" />
            <asp:BoundField HeaderText="Password" DataField="Password" ItemStyle-HorizontalAlign="Right" />
             </Columns>

<HeaderStyle HorizontalAlign="Center" BackColor="Blue" Font-Bold="True" ForeColor="White"></HeaderStyle>
           </asp:GridView>

Я также убедился, что matches возвращает значение.

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

Попробуйте

IEnumerable<XElement> matches = 
               from Doctor in doc.Descendants("Doctor") 
               where (int)Doctor.Attribute("ID") > 1 
               select new {
                              Specialist = Doctor.Attribute("Specialist").Value,
                              ID = Doctor.Attribute("ID").Value,
                              Username = Doctor.Element("Username").Value,
                              Password = Doctor.Element("Password").Value
                };

GridView1.DataSource = matches;
GridView1.DataBind();
0 голосов
/ 14 сентября 2011

Вы не сможете использовать ваш xml как есть - GridView требует, чтобы все было организовано как атрибуты.Правильная схема будет выглядеть следующим образом:

<DoctorList>
    <Doctor ID="1" Specialist="Dentist" UserName="Ahmed" Password="12345" />
    <Doctor ID="2" Specialist="oculist" Username="Aya" Password="12345" />
    <Doctor ID="3" Specialist="surgery" Username="malak" Password="12345" />
</DoctorList>

Я бы выполнил следующие шаги для решения вашей проблемы:

  1. Возьмите приведенный выше пример блока xml и заставьте его работатьс вашим GridView.

  2. Преобразуйте ваш входящий XML в соответствии с этой схемой, если у вас нет контроля над тем, как он генерируется.В Google есть несколько статей о том, как это сделать ... здесь - это одна.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...