Asp.net Linkbutton цикл

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

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);
    }

Я создаю новый экземпляр LinkButton 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, так что полегче со мной.


person nick gowdy    schedule 13.12.2011    source источник


Ответы (3)


Я ценю то, что вы пытаетесь сделать, но могу ли я предложить другой способ. Попробуйте использовать ListView (.Net 3.5+) и поместите linkButton в каждую строку. Затем 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 было бы намного проще.

person Crab Bucket    schedule 13.12.2011

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

person Manoj Savalia    schedule 13.12.2011
comment
Есть ли альтернатива, которую я могу использовать? Кнопка ссылки предназначена для редактирования записи в таблице данных, поэтому я хочу, чтобы в каждой строке была кнопка ссылки. Таким образом, пользователь может редактировать эту конкретную строку. - person nick gowdy; 13.12.2011
comment
нет ни одного метода, который используется напрямую. Таким образом, вы должны использовать цикл для if. - person Manoj Savalia; 14.12.2011

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

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

myListView.datasource = myDataSet myListView.databind()

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

person Dan An    schedule 13.12.2011