Member 12802669 Ответов: 2

Как сгруппировать данные по названию?


У меня есть таблица SQL:
ID || Title  || FileName || Extension || FileContent

1  || flower ||rose      || jpg       || binary data

2  || flower ||tulip     || jpg       || binary data

3  || cats   ||black-c   || png       || binary data

4  || cats   ||White-c   || jpg       || binary data

5  || Dogs   ||Brown-d   || jpg       || binary data


I want to display all the Pictures with the same title in one row. So for example, the Title flowers contains to Pictures, etc.
I also have a gridview:

<pre lang="ASP.NET"><asp:GridView ID="GridView1" CssClass="gridview" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" OnRowDataBound="RowDataBound" Width="100%"  GridLines="None" SelectedRowStyle-BackColor="#a8c066" runat="server" AutoGenerateColumns="False" DataKeyNames="ID">
        <Columns>
            <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" ReadOnly="True" Visible="false" />       
            <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
            <asp:BoundField DataField="FileName" HeaderText="FileName" SortExpression="FileName" />   
	    <asp:BoundField DataField="FileContent" HeaderText="FileContent" SortExpression="FileContent" visible="false" />       
       </Columns>
</asp:Gridview>


Поэтому моя цель состоит в том, чтобы выбрать строку и нажать на нее. Если заголовок выбранной строки - "цветок", то он должен загрузить 2 изображения.

Что я уже пробовал:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
          {
              GridView listBox = sender as GridView;
              int selectedID =  Int32.Parse(listBox.SelectedDataKey.Value.ToString());
              LoadDetail(selectedID);
          }


void LoadDetail(int id)
           {

                   List<pic> sb = (from x in myEnt.Pic where x.ID == id select x).ToList();

                   lblTitle.Text = String.Join(", ", sb.Select(x => x.Title));
                   Img1.ImageUrl = "data:Image/jpg;base64," + String.Join(", ", sb.Select(x => Convert.ToBase64String((byte[])x.FileContent)));
       }


Он показывает только одну картинку (из-за выбранного идентификатора), но я не знаю, как упомянуть и название. Заранее спасибо!

Jawad Ahmed Tanoli

в вашей таблице id уникален
Список & lt;pic> sb = (от x в myEnt.Рис где x.ID = = id select x).Список();
он вернет вам одну строку .так что поставьте заголовок там, где x. title== " цветок"

Member 12802669

это gridview, так что название также может быть собаки, кошки,....

Jawad Ahmed Tanoli

если вы хотите отобразить группу по названию
вы не можете поместить группу по в эту таблицу.заголовок может быть одинаковым, но другие поля разные, которые вы получаете каждый раз, когда все строки отображаются .

2 Ответов

Рейтинг:
2

Jochen Arndt

Вы уже спрашивали об этом в Как отобразить изображения с одинаковым названием?[^] .

Но теперь вы удалили поиск заголовка и оставили идентификатор в запросе, в то время как я предложил удалить идентификатор, а не заголовок из запроса.

Но даже тогда это может не сработать так, как ожидалось, потому что вы можете получить несколько результатов. Как бы вы хотели, чтобы они отображались в одной строке?

Общее решение состоит в том, чтобы предоставить некоторые элементы управления фильтрами, которые могут использоваться для загрузки только выбранных (совпадающих) элементов и отображения их в виде сетки. Это может быть также реализовано с помощью щелчка по определенной ячейке и использования ее в качестве критерия фильтра, но для этого потребуется другой элемент управления для сброса фильтра и повторной загрузки всех данных.

Я предлагаю вам подумать об этом и определить, как должны отображаться данные (с дополнительной фильтрацией), прежде чем приступать к реализации связанного кода.


Рейтинг:
0

Prashant-Systematix

Попробуйте это вместо id использовать Title В предложении where

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
       {
           GridView listBox = sender as GridView;
           string title = GridView1.SelectedRow.Cells[1].Text;
           LoadDetail(title);
       }




void LoadDetail(string title){
          List<pic> sb = (from x in myEnt.Pic where x.Tiltle == title select x).ToList();

          //Apply foreach loop in list
          foreach (var item in sb) {
              //add the images here and title on dynamic controls
          }
}


Member 12802669

Я также попробовал c. Title = = tile. И если выбрать строку и название, например, цветок, то я получу цветок, цветы. 2 раза название, но не к изображениям.

Я также попробовал его, как x. Filecontent = Title, но это двоичная картинка, и я не знаю, как написать код для нее.
Я действительно Новичок в кодировании. Что такое динамический контроль?