Asp.net Linkbutton loop - PullRequest
       9

Asp.net Linkbutton loop

0 голосов
/ 13 декабря 2011

У меня проблема с кнопками динамической ссылки, с которыми мне нужна помощь. Я создаю динамическую таблицу asp.net на основе записей в DataTable. Я также использую динамические кнопки ссылок.

protected System.Web.UI.WebControls.LinkButton lb;    

protected override void OnInit(EventArgs e)
    {
        // Build controls before page load
        lb = new LinkButton();
        lb.Text = "Update Image";

        // LinkButton obj for updating record
        lb.ID = "UpdateImg";
        lb.Click += new EventHandler(UpdateImg);
        this.Controls.Add(lb);
        base.OnInit(e);
    }

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

foreach (DataRow r in tb.Rows) // Create new row foreach row in table
            {
                TableRow tr = new TableRow();

                // Build cells
                TableCell c1 = new TableCell();
                TableCell c2 = new TableCell();
                TableCell c3 = new TableCell();
                TableCell c4 = new TableCell();
                TableCell c5 = new TableCell();
                TableCell c6 = new TableCell();

                c1.Controls.Add(new LiteralControl(r["Image_id"].ToString()));
                tr.Cells.Add(c1);
                c2.Controls.Add(new LiteralControl(r["Image_name"].ToString()));
                tr.Cells.Add(c2);
                c3.Controls.Add(new LiteralControl(r["Alt_text"].ToString()));
                tr.Cells.Add(c3);
                c4.Controls.Add(new LiteralControl("<input id=\"" + r["Image_id"].ToString() + "\" type=\"checkbox\"" + "\"></input>"));
                tr.Cells.Add(c4);


                LinkButton lbcopy = new LinkButton();
                lbcopy = lb;
                lbcopy.ID = "UpdateImg" + i;
                i++;
                c5.Controls.Add(lbcopy);
                tr.Cells.Add(c5);


                c6.Controls.Add(new LiteralControl("<a href=\"javascript:void(0);\" onclick=\"DeleteImage('" + r["Image_id"].ToString() + "','" + r["Image_name"].ToString() + "');\"><img src=\"../images/clipboard/del.png\" id=\"" + r["Image_id"].ToString() + "\" width=\"20\" height=\"20\" BORDER=0></a>"));
                tr.Cells.Add(c6);
                tblImageLibrary.Rows.Add(tr); // Assign tr to table

Затем я использую цикл foreach для итерации по каждой строке в таблице данных, чтобы я мог построить каждую строку таблицы и добавить ячейки в каждую строку. Проблема, которую я имею, состоит в том, что кнопка ссылки появляется в самом последнем ряду. Возможно, потому что есть только один объект linkbutton и через каждую итерацию цикла он перемещается в следующую строку?

Я новичок в asp.net, так что будьте осторожны со мной.

Ответы [ 3 ]

1 голос
/ 13 декабря 2011

Я ценю то, что вы пытаетесь сделать, но могу ли я предложить другой способ.Попробуйте использовать ListView (.Net 3.5+) и поместить ссылку link в каждой строке.LinkButton может быть затем скрыт при необходимости, подключившись к событию ItemDataBound .Также кнопка может иметь встроенные в нее аргументы команды.

 protected void MyListView_ItemDataBound(object sender, ListViewItemEventArgs e)
 {
     LinkButton linkButton = (LinkButton)e.Item.FindControl("linkButtonId");
     System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;

     //.. can hide and show depending on data
     linkButton.Visible = rowView["SomeData"].ToString() == "SomeValue";

     //.. or set command arg
     linkButton.CommandArgument = rowView["SomeMoreData"].ToString();
}

Кнопка ссылки затем инициирует событие ItemCommand .Строка данных и любые аргументы команды могут быть получены из события.

 protected void MyListView_OnItemCommand(object sender, ListViewCommandEventArgs e)
 {
     if(e.CommandArgument == "SomeValue")
     {
       //.. do something
     }
 }

Подобные методы можно использовать в элементах управления Repeater и GridView, которые работают с более ранними версиями .Net (1.0 и 2.0 соответственно).Возможно, вы даже сочтете GridView более полезным, поскольку кнопка редактирования более удобна.

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

0 голосов
/ 13 декабря 2011

Вы пытаетесь отобразить таблицу с linkbuttons в каждой строке?взгляните на asp:listview или asp:gridview.

Если вы можете получить DataTable или DataSet из вашей базы данных, вам просто нужно привязать его к вашему списку или сетке.Например,

myListView.datasource = myDataSet myListView.databind ()

Что еще нужно, чтобы определить макет и указать имя столбца на страницах aspx.

0 голосов
/ 13 декабря 2011

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

...