2011-05-24 88 views
2

嗨,我动态创建链接按钮,如下所示。问题是如何在“linktopage”的位置添加链接按钮。目前链接按钮添加在表格下方。链接按钮里面的html表格单元格asp.net

for(i=0;i<100;i++) 
{ 
LinkButton lnk = new LinkButton(); 
lnk.ID = "lnk" + i; 
lnk.Text = "open profile"; 
lnk.Click += new System.EventHandler(lnk_click); 
this.Page.Form.Controls.Add(lnk); 

htmlstring += "<tr style='height:30px;'>" + 
       "<td>" + firstname + "</td>" + 
       "<td>" + surname + "</td>" + 
       "<td>" + email + "</td>" + 
       "<td>" + mobile + "</td>" + 
       **"<td>" + linktopage + "</td>" +** 
       "</tr>"; 
        } 
+0

哪里了'linktopage'从何而来? – balexandre 2011-05-24 11:20:18

+0

我只是将它添加为虚拟占位符。实际上我希望linkbutton被添加到那里。例如它应该被渲染为名字,surnmae,email,mobile,htmllink – sam 2011-05-24 11:26:27

+0

因此,你的'linktopage'是一个动作页面,就像执行一个页面或者执行一个命令一样?你想这是同步还是异步? – balexandre 2011-05-24 11:31:13

回答

0

如何:

更换**"<td>" + linktopage + "</td>" +**,与<td><asp:Panel id="lnktoPage" /></td> 而从代码添加它,lnktoPage.Controls.Add(lnk);

注意Panel呈现为DIV在客户端。

或者......你可以创建动态HTML链接:

string strID = "someID"; 
string strLink = @"<a id=""" + strID + @"" + 
       @" onclick="" " + lnk_clickMethodName + @" "" " + 
       @"href=""http://www.w3schools.com"">Visit W3Schools.com!</a>"; 

所以,你最终的方法看起来是这样的:

for (int i = 0; i < 100; i++) 
{ 
    string strID = "lnk" + i.ToString(); 
    string strLink = @"<a id=""" + strID + @"" + 
        @" onclick="" " + lnk_clickMethodName + @" "" " + 
        @"href=""http://www.w3schools.com"">Visit W3Schools.com!</a>"; 
    StringBuilder html = new StringBuilder(); 

    html.Append(@"<tr style='height:30px;'>"); 
    html.Append(@"<td>" + firstname + "</td>"); 
    html.Append(@"<td>" + surname + "</td>"); 
    html.Append(@"<td>" + email + "</td>"); 
    html.Append(@"<td>" + mobile + "</td>"); 
    html.Append(@"<td>" + strLink + "</td>"); 
    html.Append(@"</tr>"); 
} 
+0

即时获取此错误操作符'+'不能应用于'字符串'和'空' – sam 2011-05-24 11:42:41

0

,而不是链接按钮,使用href标签;它会很容易.....

+0

我试过使用href,但它不是调用c#方法 – sam 2011-05-24 11:21:15

+0

我使用此代码Call C# Method,但没有运气 – sam 2011-05-24 11:22:23

2

从您的意见

.aspx.cs

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
      Populate(); 
    } 

    private void Populate() 
    { 
     List<MyTableData> list = new List<MyTableData>(); 

     for (int i = 0; i < 10; i++) 
     { 
      list.Add(
       new MyTableData() 
       { 
        FirstName = "Firstname " + i.ToString(), 
        LastName = "Lastname " + i.ToString(), 
        Email = "Email " + i.ToString(), 
        Mobile = "Mobile " + i.ToString(), 
        CmdArgument = i.ToString() 
       }); 
     } 

     gv.DataSource = list; 
     gv.DataBind(); 
    } 

    protected void lnkBtn_Command(object sender, CommandEventArgs e) 
    { 
     string btnNumber = e.CommandArgument.ToString(); 

     // more code... 

     lit.Text = "Button pressed <b>" + btnNumber + "</b>"; 
    } 
} 

public class MyTableData 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Email { get; set; } 
    public string Mobile { get; set; } 
    public string CmdArgument { get; set; } 
} 

的.aspx

<div> 
    <asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" CellPadding="5"> 
     <Columns> 
      <asp:BoundField DataField="FirstName" HeaderText="First name" /> 
      <asp:BoundField DataField="LastName" HeaderText="Last name" /> 
      <asp:BoundField DataField="Email" HeaderText="Email" /> 
      <asp:BoundField DataField="Mobile" HeaderText="Mobile" /> 
      <asp:TemplateField HeaderText=""> 
       <ItemTemplate> 
        <asp:LinkButton ID="lnkBtn" runat="server" OnCommand="lnkBtn_Command" CommandArgument='<%# Eval("CmdArgument") %>' 
         Text='<%# Eval("CmdArgument", "Button {0}") %>' /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 
</div> 
<hr /> 
<asp:Literal ID="lit" runat="server" /> 

结果

enter image description here

Source Code available

+0

@ balexandre-非常感谢。我会执行此操作并回复给您。 – sam 2011-05-24 12:19:27