C
Class
Hi all,
I create a gridview dynamicly because I don't know the columns in advance.
I use the Templatefield to create a linkbutton.
Everything fine..I have the postbackurl and it works.
But now I need to do some extra stuff in the click event of the created
linkbutton.
I tried to assign a delegate to the linkbutton's click event but I never
gets in the procedure I assign.
How can I trap the click event?
Thank you.
Here is the code:
private void CreateGrid()
{
//Create the grid:
foreach (DataColumn col in dtt.Columns)
{
if (col.ColumnName.Equals("FakAID") || col.ColumnName.Equals("markID") ||
col.ColumnName.Equals("FilID"))
continue;
if (col.ColumnName.Equals("Invoice"))
{
TemplateField tempColumn = new TemplateField();
tempColumn.HeaderText = col.ColumnName;
tempColumn.ItemTemplate = new LinkButtonTemplate(col.ColumnName,
"~/screen.aspx?nav=1&tab=I&cid=", "markID");
grvSearchResult.Columns.Add(tempColumn);
}
else if (col.ColumnName.Equals("File"))
{
TemplateField tempColumn = new TemplateField();
tempColumn.HeaderText = col.ColumnName;
tempColumn.ItemTemplate = new LinkButtonTemplate(col.ColumnName,
"~/screen.aspx?nav=1&fid=", "FilID");
grvSearchResult.Columns.Add(tempColumn);
}
else if (col.ColumnName.Equals("Customer"))
{
TemplateField tempColumn = new TemplateField();
tempColumn.HeaderText = col.ColumnName;
tempColumn.ItemTemplate = new LinkButtonTemplate(col.ColumnName,
"~/screent.aspx?nav=1&cid=", "FakID");
grvSearchResult.Columns.Add(tempColumn);
}
else
{
BoundField boundColumn = new BoundField();
boundColumn.DataField = col.ColumnName;
boundColumn.HeaderText = col.ColumnName;
grvSearchResult.Columns.Add(boundColumn);
}
}
grvSearchResult.DataSource = dtt;
grvSearchResult.DataBind();
}
#region LinkButtonTemplate
public class LinkButtonTemplate : ITemplate, INamingContainer
{
string theColumnName = "", thePostBackUrl = "", theColumnCommandArg = "";
public LinkButtonTemplate(string ColumnName, string PostBackUrl, string
ColumnCommandArg)
{
theColumnName = ColumnName;
thePostBackUrl = PostBackUrl;
theColumnCommandArg = ColumnCommandArg;
}
public void InstantiateIn(Control container)
{
LinkButton lnk = new LinkButton();
container.Controls.Add(lnk);
lnk.DataBinding += new EventHandler(lnk_DataBinding);
}
void lnk_DataBinding(object sender, EventArgs e)
{
LinkButton lnk = (LinkButton)sender;
DataRowView drv = (DataRowView)((GridViewRow)lnk.NamingContainer).DataItem;
lnk.Text = drv[theColumnName].ToString();
lnk.PostBackUrl = thePostBackUrl + drv[theColumnCommandArg].ToString();
}
}
#endregion
I create a gridview dynamicly because I don't know the columns in advance.
I use the Templatefield to create a linkbutton.
Everything fine..I have the postbackurl and it works.
But now I need to do some extra stuff in the click event of the created
linkbutton.
I tried to assign a delegate to the linkbutton's click event but I never
gets in the procedure I assign.
How can I trap the click event?
Thank you.
Here is the code:
private void CreateGrid()
{
//Create the grid:
foreach (DataColumn col in dtt.Columns)
{
if (col.ColumnName.Equals("FakAID") || col.ColumnName.Equals("markID") ||
col.ColumnName.Equals("FilID"))
continue;
if (col.ColumnName.Equals("Invoice"))
{
TemplateField tempColumn = new TemplateField();
tempColumn.HeaderText = col.ColumnName;
tempColumn.ItemTemplate = new LinkButtonTemplate(col.ColumnName,
"~/screen.aspx?nav=1&tab=I&cid=", "markID");
grvSearchResult.Columns.Add(tempColumn);
}
else if (col.ColumnName.Equals("File"))
{
TemplateField tempColumn = new TemplateField();
tempColumn.HeaderText = col.ColumnName;
tempColumn.ItemTemplate = new LinkButtonTemplate(col.ColumnName,
"~/screen.aspx?nav=1&fid=", "FilID");
grvSearchResult.Columns.Add(tempColumn);
}
else if (col.ColumnName.Equals("Customer"))
{
TemplateField tempColumn = new TemplateField();
tempColumn.HeaderText = col.ColumnName;
tempColumn.ItemTemplate = new LinkButtonTemplate(col.ColumnName,
"~/screent.aspx?nav=1&cid=", "FakID");
grvSearchResult.Columns.Add(tempColumn);
}
else
{
BoundField boundColumn = new BoundField();
boundColumn.DataField = col.ColumnName;
boundColumn.HeaderText = col.ColumnName;
grvSearchResult.Columns.Add(boundColumn);
}
}
grvSearchResult.DataSource = dtt;
grvSearchResult.DataBind();
}
#region LinkButtonTemplate
public class LinkButtonTemplate : ITemplate, INamingContainer
{
string theColumnName = "", thePostBackUrl = "", theColumnCommandArg = "";
public LinkButtonTemplate(string ColumnName, string PostBackUrl, string
ColumnCommandArg)
{
theColumnName = ColumnName;
thePostBackUrl = PostBackUrl;
theColumnCommandArg = ColumnCommandArg;
}
public void InstantiateIn(Control container)
{
LinkButton lnk = new LinkButton();
container.Controls.Add(lnk);
lnk.DataBinding += new EventHandler(lnk_DataBinding);
}
void lnk_DataBinding(object sender, EventArgs e)
{
LinkButton lnk = (LinkButton)sender;
DataRowView drv = (DataRowView)((GridViewRow)lnk.NamingContainer).DataItem;
lnk.Text = drv[theColumnName].ToString();
lnk.PostBackUrl = thePostBackUrl + drv[theColumnCommandArg].ToString();
}
}
#endregion