ASP.NET: динамическое добавление матрицы изображений в каждую строку Gridview - PullRequest
1 голос
/ 04 августа 2009

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

public static string PASS = "./Images/pass.png";

Также предположим, что это Gridview в Gridview (я не уверен, что внутренний Gridview является правильным элементом управления для использования):

<asp:GridView ID="GridView1" runat="server">
        <Columns>
            <asp:TemplateField>
                <asp:ItemTemplate>
                    <asp:GridView ID="GridView2" runat="server">
                    </asp:GridView>
                </asp:ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

Как я могу динамически добавлять каждую матрицу в каждую строку?

EDIT:

Хорошо, вот первая попытка, используя ответ Стива, и слегка следуя http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datalist.items.aspx в качестве модели. Меня смущает, как динамически добавлять DataList в GridView, а также как (и когда) выполнять привязку данных.

protected void Page_Load(object sender, EventArgs e)
    {
        DataTable table = new DataTable();
        table.Columns.Add("DataList", typeof(DataList));

        for (int i = 0; i < 4; i++)
        {
            DataRow dr = table.NewRow();
            DataList1.DataSource = CreateDataSource();
            DataList1.DataBind();
            table.Rows.Add(dr);
        }
        GridView1.DataSource = table;
        GridView1.DataBind();

    }

    ICollection CreateDataSource()
    {
        string imageLocation = "./Images/311.jpg";
        DataTable dt = new DataTable();
        DataRow dr;

        dt.Columns.Add(new DataColumn("ImageURL", typeof(string)));

        for (int i = 0; i < 25; i++)
        {
            dr = dt.NewRow();
            dr[0] = imageLocation;
            dt.Rows.Add(dr);
        }

        DataView dv = new DataView(dt);
        return dv;
    }

<form id="form1" runat="server">
<div>
    <asp:GridView ID="GridView1" runat="server">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:DataList ID="DataList1" RepeatColumns="5" runat="server">
                        <ItemTemplate>     
                           <img src="<%# DataBinder.Eval(Container.DataItem, "ImageURL") %> />    
                        </ItemTemplate>
                    </asp:DataList>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

</div>
</form>

Конкретное исключение, которое я получаю:

Источник данных для GridView с идентификатором 'GridView1' не имел каких-либо свойств или атрибутов для создания столбцов. Убедитесь, что ваш источник данных имеет содержимое.

Куда я иду не так?

Ответы [ 3 ]

1 голос
/ 19 января 2012
    Protected void Page_Load(object sender, EventArgs e)
    {
        DataTable table = new DataTable();
        table.Columns.Add("DataList", typeof(DataList));
        DataRow dr = table.NewRow();
        table.Rows.Add(dr);
       GridView1.DataSource = table;
        GridView1.DataBind();

    }

    ICollection CreateDataSource()
    {
        string imageLocation = "~/text.jpg";  
        DataTable dt = new DataTable();
        DataRow dr;

        dt.Columns.Add(new DataColumn("ImageURL", typeof(string)));

        for (int i = 0; i < 25; i++)
        {
            dr = dt.NewRow();
            dr[0] = imageLocation;
            dt.Rows.Add(dr);
        }

        DataView dv = new DataView(dt);
        return dv;
    }

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DataList dataList1 = e.Row.FindControl("DataList1") as DataList;
            dataList1.DataSource = CreateDataSource();
            dataList1.DataBind();
        }
    } 


    <asp:GridView ID="GridView1" runat="server" 
       onrowdatabound="GridView1_RowDataBound" AutoGenerateColumns="false"> 
      <Columns> 
        <asp:TemplateField> 
            <ItemTemplate> 
                <asp:DataList ID="DataList1" RepeatColumns="5" runat="server"> 
                    <ItemTemplate>      
                        <asp:Image ID="img" runat="server" 
                             ImageUrl='<%# DataBinder.Eval         
                               (Container.DataItem, "ImageURL") %>'  />
                    </ItemTemplate> 
                </asp:DataList> 
            </ItemTemplate> 
        </asp:TemplateField> 
    </Columns> 
</asp:GridView> 
1 голос
/ 04 августа 2009

А как насчет использования списка данных? Создайте общий список коллекции строк, добавьте 25 "./Images/pass.png" и привяжите его к списку данных.

В шаблоне товара у вас есть это:

Редактировать (изменено значение eval для контейнера)

<asp:DataList ID="DataList1" RepeatColumns="5" runat="server">
    <ItemTemplate>
        <img src="<%# Container.DataItem %>" />
    </ItemTemplate>
</asp:DataList>

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

0 голосов
/ 08 августа 2009

Должен ли это быть вид сетки. Почему это не может быть таблица asp:

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