2011-12-13 52 views
0

我遇到了動態鏈接按鈕的問題,我需要幫助。我正在創建一個基於數據表中記錄的動態asp.net表。我也使用動態鏈接按鈕。Asp.net Linkbutton循環

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

我創建了一個新的LinkBut​​ton實例的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出現在最後一行。可能是因爲只有一個linkbutton對象,並且通過每個循環迭代它被移動到下一行?

我是新來的asp.net,所以去我的容易。

回答

0

我認爲這是不可能的,因爲如果你想動態添加控制,那麼你必須有每個記錄的循環,然後你將它添加到表中。

+0

有沒有其他方法可以使用? linkbutton用於編輯數據表中的記錄,這就是爲什麼我希望每行都有一個linkbutton。所以用戶可以編輯特定的行。 –

+0

沒有任何直接使用的方法。 所以你必須使用if循環。 –

1

我很欣賞你想要做的,但我可以建議另一種方式。嘗試使用ListView(.Net 3.5+)並將linkBut​​ton放入每一行。鏈接按鈕可以根據需要隱藏到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 
    } 
} 

類似的方法可以在中繼器和其與早期版本的淨(分別爲1.0和2.0)的工作的GridView控件一起使用。你甚至可以發現GridView更有用,因爲編輯按鈕更加開箱即用。

您的動態構建表的方式會遇到問題,可能是ViewState。利用.Net網格控件會容易得多。

0

您是否試圖在每一行渲染一個帶有linkbuttons的表?請看asp:listviewasp:gridview

如果您可以從數據庫中獲得DataTableDataSet,那麼您只需將其綁定到您的listview或gridview即可。例如

myListView.datasource = myDataSet myListView.databind()

還有什麼你需要的是明確的佈局和烏爾aspx頁面中指定列名。