我正在动态生成gridview。这是代码
设计代码
<asp:GridView Width="100%" CssClass="TTable" ID="MainGridView" OnDataBound = "OnDataBound" runat="server" AutoGenerateColumns="False" onrowdatabound="GridView_RowDataBound">
<Columns>
</Columns>
</asp:GridView>
代码背后:
private void createGridView(DataTable gridviewdt)
{
MainGridView.Columns.Clear();
//Iterate through the columns of the datatable to set the data bound field dynamically.
foreach (DataColumn col in gridviewdt.Columns)
{
//Declare the bound field and allocate memory for the bound field.
BoundField bfield = new BoundField();
//Initalize the DataField value.
bfield.DataField = col.ColumnName;
//Initialize the HeaderText field value.
bfield.HeaderText = col.ColumnName;
//Add the newly created bound field to the GridView.
MainGridView.Columns.Add(bfield);
}
}
// Bind Datatable to gridview
MainGridView.DataSource = gridviewdt;
MainGridView.DataBind();
在上面的代码中,我想在特定的列数据上放置超链接。如果我将超链接直接放在Datatable上,那么它会在没有执行的情况下显示它。
<asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>
如何在某些gridview列上添加上面的链接按钮?
答案 0 :(得分:2)
如果我们想在gridview控件中以声明方式添加LinkButton
,那么我们将其包含在TemplateField
内而不是BoundField
内。另外我不确定你为什么要遍历DataTable(我猜它是gridview的源码)。正确的方法是在将数据绑定到gridview之前将TemplateField
添加到columns集合,最后在RowDataBound
事件中添加控件,该事件是为绑定到gridview的每一行引发的。
您可以使用: -
在Page_Load
: -
if (!IsPostBack)
{
TemplateField myTemplate = new TemplateField();
myTemplate.HeaderText = "MyLinkButton";
MainGridView.Columns.Add(myTemplate);
BindGrid();
}
此处,BindGrid
是将数据简单地绑定到gridview的方法: -
private void BindGrid()
{
MainGridView.DataSource = GetData(); \\Your data source here
MainGridView.DataBind();
}
最后在gridview的LinkButton
事件中添加RowDataBound
控件,如下所示: -
protected void MainGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton myLink = new LinkButton();
myLink.ID = "LinkButton1";
myLink.Text = "LinkButton";
myLink.Click += myLink_Click;
e.Row.Cells[0].Controls.Add(myLink);
}
}
请注意,因为我只添加了1列(在页面加载中),因此我使用e.Row.Cells[0]
来获取第一列。如果添加多个列,则必须相应地更改代码。