473,406 Members | 2,705 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,406 software developers and data experts.

Getting the Click event of an TemplateField

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).Da taItem;

lnk.Text = drv[theColumnName].ToString();

lnk.PostBackUrl = thePostBackUrl + drv[theColumnCommandArg].ToString();

}

}

#endregion
Feb 23 '07 #1
6 2244
Please find fixed code below. Two things, 1. you have to create grid on init
event handler, 2. bind data only once (IsPostBack == false)

protected void Page_Init(object sender, EventArgs e)
{
CreateGrid();
}

public DataTable GetData()
{
DataTable t = new DataTable();

t.Columns.Add("Id", typeof(int));
t.Columns.Add("Name", typeof(string));
t.Columns.Add("Invoice", typeof(string));
t.Columns.Add("MarkID", typeof(int));

for (int i = 0; i < 10; i++)
{
string str = i.ToString();
DataRow r = t.NewRow();
r[0] = i;
r[1] = "name" + str;
r[2] = "inv" + str;
r[3] = i;
t.Rows.Add(r);
}

return t;
}

private void CreateGrid()
{
DataTable dtt = GetData();

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

}

}

if (!IsPostBack)
{
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);
lnk.ID = "idx";
lnk.Click += new EventHandler(lnk_Click);

}

void lnk_Click(object sender, EventArgs e)
{
// event handler will execute now
}

void lnk_DataBinding(object sender, EventArgs e)
{

LinkButton lnk = (LinkButton)sender;
DataRowView drv = (DataRowView)((GridViewRow)lnk.NamingContainer).Da taItem;
lnk.Text = drv[theColumnName].ToString();
//lnk.PostBackUrl = thePostBackUrl + drv[theColumnCommandArg].ToString();

}

}

#endregion
--
Milosz
"Class" wrote:
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).Da taItem;

lnk.Text = drv[theColumnName].ToString();

lnk.PostBackUrl = thePostBackUrl + drv[theColumnCommandArg].ToString();

}

}

#endregion
Feb 24 '07 #2
Hi Milosz,

great thanks for the help I will try it.
One more thing the click event will be in the Template class.
How do I get it to be in the Page?
I want to use the LinkButtonTemplate class in more pages and grids.

Thank you.

"Milosz Skalecki [MCAD]" <mi*****@DONTLIKESPAMwp.plschreef in bericht
news:B2**********************************@microsof t.com...
Please find fixed code below. Two things, 1. you have to create grid on
init
event handler, 2. bind data only once (IsPostBack == false)

protected void Page_Init(object sender, EventArgs e)
{
CreateGrid();
}

public DataTable GetData()
{
DataTable t = new DataTable();

t.Columns.Add("Id", typeof(int));
t.Columns.Add("Name", typeof(string));
t.Columns.Add("Invoice", typeof(string));
t.Columns.Add("MarkID", typeof(int));

for (int i = 0; i < 10; i++)
{
string str = i.ToString();
DataRow r = t.NewRow();
r[0] = i;
r[1] = "name" + str;
r[2] = "inv" + str;
r[3] = i;
t.Rows.Add(r);
}

return t;
}

private void CreateGrid()
{
DataTable dtt = GetData();

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

}

}

if (!IsPostBack)
{
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);
lnk.ID = "idx";
lnk.Click += new EventHandler(lnk_Click);

}

void lnk_Click(object sender, EventArgs e)
{
// event handler will execute now
}

void lnk_DataBinding(object sender, EventArgs e)
{

LinkButton lnk = (LinkButton)sender;
DataRowView drv =
(DataRowView)((GridViewRow)lnk.NamingContainer).Da taItem;
lnk.Text = drv[theColumnName].ToString();
//lnk.PostBackUrl = thePostBackUrl + drv[theColumnCommandArg].ToString();

}

}

#endregion
--
Milosz
"Class" wrote:
>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).D ataItem;

lnk.Text = drv[theColumnName].ToString();

lnk.PostBackUrl = thePostBackUrl + drv[theColumnCommandArg].ToString();

}

}

#endregion

Feb 24 '07 #3
Please find simple resolution below. Note you'll have to write the same code
on every page anyway, so wouldn't just create a user control and expose some
properties to make it generic? (if you don't know how to approach that let me
know)

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text.RegularExpressions;

public partial class _Default : BasePage
{
protected void Page_Init(object sender, EventArgs e)
{
CreateGrid();
}

public DataTable GetData()
{
DataTable t = new DataTable();

t.Columns.Add("Id", typeof(int));
t.Columns.Add("Name", typeof(string));
t.Columns.Add("Invoice", typeof(string));
t.Columns.Add("MarkID", typeof(int));

for (int i = 0; i < 10; i++)
{
string str = i.ToString();
DataRow r = t.NewRow();
r[0] = i;
r[1] = "name" + str;
r[2] = "inv" + str;
r[3] = i;
t.Rows.Add(r);
}

return t;
}

private void CreateGrid()
{
DataTable dtt = GetData();

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;

LinkButtonTemplate template = new LinkButtonTemplate(col.ColumnName,
"~/screen.aspx?nav=1&tab=I&cid=", "markID");

template.LinkButtonClick += new EventHandler(template_LinkButtonClick);

tempColumn.ItemTemplate = template;

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

}

}

if (!IsPostBack)
{
grvSearchResult.DataSource = dtt;
grvSearchResult.DataBind();
}
}

void template_LinkButtonClick(object sender, EventArgs e)
{
//whatever
}
#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 event EventHandler LinkButtonClick;

public void InstantiateIn(Control container)
{

LinkButton lnk = new LinkButton();

container.Controls.Add(lnk);

lnk.DataBinding += new EventHandler(lnk_DataBinding);
lnk.ID = "idx";

if (LinkButtonClick != null)
lnk.Click += new EventHandler(LinkButtonClick);

}

void lnk_Click(object sender, EventArgs e)
{
// event handler will execute now
}

void lnk_DataBinding(object sender, EventArgs e)
{

LinkButton lnk = (LinkButton)sender;
DataRowView drv = (DataRowView)((GridViewRow)lnk.NamingContainer).Da taItem;
lnk.Text = drv[theColumnName].ToString();
//lnk.PostBackUrl = thePostBackUrl + drv[theColumnCommandArg].ToString();

}

}

#endregion

}

--
Milosz
"Class" wrote:
Hi Milosz,

great thanks for the help I will try it.
One more thing the click event will be in the Template class.
How do I get it to be in the Page?
I want to use the LinkButtonTemplate class in more pages and grids.

Thank you.

"Milosz Skalecki [MCAD]" <mi*****@DONTLIKESPAMwp.plschreef in bericht
news:B2**********************************@microsof t.com...
Please find fixed code below. Two things, 1. you have to create grid on
init
event handler, 2. bind data only once (IsPostBack == false)

protected void Page_Init(object sender, EventArgs e)
{
CreateGrid();
}

public DataTable GetData()
{
DataTable t = new DataTable();

t.Columns.Add("Id", typeof(int));
t.Columns.Add("Name", typeof(string));
t.Columns.Add("Invoice", typeof(string));
t.Columns.Add("MarkID", typeof(int));

for (int i = 0; i < 10; i++)
{
string str = i.ToString();
DataRow r = t.NewRow();
r[0] = i;
r[1] = "name" + str;
r[2] = "inv" + str;
r[3] = i;
t.Rows.Add(r);
}

return t;
}

private void CreateGrid()
{
DataTable dtt = GetData();

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

}

}

if (!IsPostBack)
{
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);
lnk.ID = "idx";
lnk.Click += new EventHandler(lnk_Click);

}

void lnk_Click(object sender, EventArgs e)
{
// event handler will execute now
}

void lnk_DataBinding(object sender, EventArgs e)
{

LinkButton lnk = (LinkButton)sender;
DataRowView drv =
(DataRowView)((GridViewRow)lnk.NamingContainer).Da taItem;
lnk.Text = drv[theColumnName].ToString();
//lnk.PostBackUrl = thePostBackUrl + drv[theColumnCommandArg].ToString();

}

}

#endregion
--
Milosz
"Class" wrote:
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)

{
Feb 24 '07 #4
Hi Milosz,

WOW! great help thank you alot!
I understand what you mean with the user control way.

One more thing. This is on a search page and after clicking the search
button I know what to search for.
Then I create the grid.
But that's after the Page_Init and Page_Load.
Is there something I can do about that?

Thanks again.

"Milosz Skalecki [MCAD]" <mi*****@DONTLIKESPAMwp.plschreef in bericht
news:8A**********************************@microsof t.com...
Please find simple resolution below. Note you'll have to write the same
code
on every page anyway, so wouldn't just create a user control and expose
some
properties to make it generic? (if you don't know how to approach that let
me
know)

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text.RegularExpressions;

public partial class _Default : BasePage
{
protected void Page_Init(object sender, EventArgs e)
{
CreateGrid();
}

public DataTable GetData()
{
DataTable t = new DataTable();

t.Columns.Add("Id", typeof(int));
t.Columns.Add("Name", typeof(string));
t.Columns.Add("Invoice", typeof(string));
t.Columns.Add("MarkID", typeof(int));

for (int i = 0; i < 10; i++)
{
string str = i.ToString();
DataRow r = t.NewRow();
r[0] = i;
r[1] = "name" + str;
r[2] = "inv" + str;
r[3] = i;
t.Rows.Add(r);
}

return t;
}

private void CreateGrid()
{
DataTable dtt = GetData();

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;

LinkButtonTemplate template = new LinkButtonTemplate(col.ColumnName,
"~/screen.aspx?nav=1&tab=I&cid=", "markID");

template.LinkButtonClick += new EventHandler(template_LinkButtonClick);

tempColumn.ItemTemplate = template;

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

}

}

if (!IsPostBack)
{
grvSearchResult.DataSource = dtt;
grvSearchResult.DataBind();
}
}

void template_LinkButtonClick(object sender, EventArgs e)
{
//whatever
}
#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 event EventHandler LinkButtonClick;

public void InstantiateIn(Control container)
{

LinkButton lnk = new LinkButton();

container.Controls.Add(lnk);

lnk.DataBinding += new EventHandler(lnk_DataBinding);
lnk.ID = "idx";

if (LinkButtonClick != null)
lnk.Click += new EventHandler(LinkButtonClick);

}

void lnk_Click(object sender, EventArgs e)
{
// event handler will execute now
}

void lnk_DataBinding(object sender, EventArgs e)
{

LinkButton lnk = (LinkButton)sender;
DataRowView drv =
(DataRowView)((GridViewRow)lnk.NamingContainer).Da taItem;
lnk.Text = drv[theColumnName].ToString();
//lnk.PostBackUrl = thePostBackUrl + drv[theColumnCommandArg].ToString();

}

}

#endregion

}

--
Milosz
"Class" wrote:
>Hi Milosz,

great thanks for the help I will try it.
One more thing the click event will be in the Template class.
How do I get it to be in the Page?
I want to use the LinkButtonTemplate class in more pages and grids.

Thank you.

"Milosz Skalecki [MCAD]" <mi*****@DONTLIKESPAMwp.plschreef in bericht
news:B2**********************************@microso ft.com...
Please find fixed code below. Two things, 1. you have to create grid on
init
event handler, 2. bind data only once (IsPostBack == false)

protected void Page_Init(object sender, EventArgs e)
{
CreateGrid();
}

public DataTable GetData()
{
DataTable t = new DataTable();

t.Columns.Add("Id", typeof(int));
t.Columns.Add("Name", typeof(string));
t.Columns.Add("Invoice", typeof(string));
t.Columns.Add("MarkID", typeof(int));

for (int i = 0; i < 10; i++)
{
string str = i.ToString();
DataRow r = t.NewRow();
r[0] = i;
r[1] = "name" + str;
r[2] = "inv" + str;
r[3] = i;
t.Rows.Add(r);
}

return t;
}

private void CreateGrid()
{
DataTable dtt = GetData();

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

}

}

if (!IsPostBack)
{
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);
lnk.ID = "idx";
lnk.Click += new EventHandler(lnk_Click);

}

void lnk_Click(object sender, EventArgs e)
{
// event handler will execute now
}

void lnk_DataBinding(object sender, EventArgs e)
{

LinkButton lnk = (LinkButton)sender;
DataRowView drv =
(DataRowView)((GridViewRow)lnk.NamingContainer).Da taItem;
lnk.Text = drv[theColumnName].ToString();
//lnk.PostBackUrl = thePostBackUrl +
drv[theColumnCommandArg].ToString();

}

}

#endregion
--
Milosz
"Class" wrote:

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)

{

Feb 24 '07 #5
You have to recreate the grid because criteria have changed:

protected void SearchButton_Click(object sender, EventArgs e)
{
string criteria = txtCrieria.Text;
// get data source based on carent criteria
CreateGrid();
}
--
Milosz
"Class" wrote:
Hi Milosz,

WOW! great help thank you alot!
I understand what you mean with the user control way.

One more thing. This is on a search page and after clicking the search
button I know what to search for.
Then I create the grid.
But that's after the Page_Init and Page_Load.
Is there something I can do about that?

Thanks again.

"Milosz Skalecki [MCAD]" <mi*****@DONTLIKESPAMwp.plschreef in bericht
news:8A**********************************@microsof t.com...
Please find simple resolution below. Note you'll have to write the same
code
on every page anyway, so wouldn't just create a user control and expose
some
properties to make it generic? (if you don't know how to approach that let
me
know)

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text.RegularExpressions;

public partial class _Default : BasePage
{
protected void Page_Init(object sender, EventArgs e)
{
CreateGrid();
}

public DataTable GetData()
{
DataTable t = new DataTable();

t.Columns.Add("Id", typeof(int));
t.Columns.Add("Name", typeof(string));
t.Columns.Add("Invoice", typeof(string));
t.Columns.Add("MarkID", typeof(int));

for (int i = 0; i < 10; i++)
{
string str = i.ToString();
DataRow r = t.NewRow();
r[0] = i;
r[1] = "name" + str;
r[2] = "inv" + str;
r[3] = i;
t.Rows.Add(r);
}

return t;
}

private void CreateGrid()
{
DataTable dtt = GetData();

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;

LinkButtonTemplate template = new LinkButtonTemplate(col.ColumnName,
"~/screen.aspx?nav=1&tab=I&cid=", "markID");

template.LinkButtonClick += new EventHandler(template_LinkButtonClick);

tempColumn.ItemTemplate = template;

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

}

}

if (!IsPostBack)
{
grvSearchResult.DataSource = dtt;
grvSearchResult.DataBind();
}
}

void template_LinkButtonClick(object sender, EventArgs e)
{
//whatever
}
#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 event EventHandler LinkButtonClick;

public void InstantiateIn(Control container)
{

LinkButton lnk = new LinkButton();

container.Controls.Add(lnk);

lnk.DataBinding += new EventHandler(lnk_DataBinding);
lnk.ID = "idx";

if (LinkButtonClick != null)
lnk.Click += new EventHandler(LinkButtonClick);

}

void lnk_Click(object sender, EventArgs e)
{
// event handler will execute now
}

void lnk_DataBinding(object sender, EventArgs e)
{

LinkButton lnk = (LinkButton)sender;
DataRowView drv =
(DataRowView)((GridViewRow)lnk.NamingContainer).Da taItem;
lnk.Text = drv[theColumnName].ToString();
//lnk.PostBackUrl = thePostBackUrl + drv[theColumnCommandArg].ToString();

}

}

#endregion

}

--
Milosz
"Class" wrote:
Hi Milosz,

great thanks for the help I will try it.
One more thing the click event will be in the Template class.
How do I get it to be in the Page?
I want to use the LinkButtonTemplate class in more pages and grids.

Thank you.

"Milosz Skalecki [MCAD]" <mi*****@DONTLIKESPAMwp.plschreef in bericht
news:B2**********************************@microsof t.com...
Please find fixed code below. Two things, 1. you have to create grid on
init
event handler, 2. bind data only once (IsPostBack == false)

protected void Page_Init(object sender, EventArgs e)
{
CreateGrid();
}

public DataTable GetData()
{
DataTable t = new DataTable();

t.Columns.Add("Id", typeof(int));
t.Columns.Add("Name", typeof(string));
t.Columns.Add("Invoice", typeof(string));
t.Columns.Add("MarkID", typeof(int));

for (int i = 0; i < 10; i++)
{
string str = i.ToString();
DataRow r = t.NewRow();
r[0] = i;
r[1] = "name" + str;
r[2] = "inv" + str;
r[3] = i;
t.Rows.Add(r);
}

return t;
}

private void CreateGrid()
{
DataTable dtt = GetData();

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);
Feb 24 '07 #6
Thanks alot Milosz!!!!!!!!!
"Milosz Skalecki [MCAD]" <mi*****@DONTLIKESPAMwp.plschreef in bericht
news:2D**********************************@microsof t.com...
You have to recreate the grid because criteria have changed:

protected void SearchButton_Click(object sender, EventArgs e)
{
string criteria = txtCrieria.Text;
// get data source based on carent criteria
CreateGrid();
}
--
Milosz
"Class" wrote:
>Hi Milosz,

WOW! great help thank you alot!
I understand what you mean with the user control way.

One more thing. This is on a search page and after clicking the search
button I know what to search for.
Then I create the grid.
But that's after the Page_Init and Page_Load.
Is there something I can do about that?

Thanks again.

"Milosz Skalecki [MCAD]" <mi*****@DONTLIKESPAMwp.plschreef in bericht
news:8A**********************************@microso ft.com...
Please find simple resolution below. Note you'll have to write the same
code
on every page anyway, so wouldn't just create a user control and expose
some
properties to make it generic? (if you don't know how to approach that
let
me
know)

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text.RegularExpressions;

public partial class _Default : BasePage
{
protected void Page_Init(object sender, EventArgs e)
{
CreateGrid();
}

public DataTable GetData()
{
DataTable t = new DataTable();

t.Columns.Add("Id", typeof(int));
t.Columns.Add("Name", typeof(string));
t.Columns.Add("Invoice", typeof(string));
t.Columns.Add("MarkID", typeof(int));

for (int i = 0; i < 10; i++)
{
string str = i.ToString();
DataRow r = t.NewRow();
r[0] = i;
r[1] = "name" + str;
r[2] = "inv" + str;
r[3] = i;
t.Rows.Add(r);
}

return t;
}

private void CreateGrid()
{
DataTable dtt = GetData();

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;

LinkButtonTemplate template = new LinkButtonTemplate(col.ColumnName,
"~/screen.aspx?nav=1&tab=I&cid=", "markID");

template.LinkButtonClick += new EventHandler(template_LinkButtonClick);

tempColumn.ItemTemplate = template;

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

}

}

if (!IsPostBack)
{
grvSearchResult.DataSource = dtt;
grvSearchResult.DataBind();
}
}

void template_LinkButtonClick(object sender, EventArgs e)
{
//whatever
}
#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 event EventHandler LinkButtonClick;

public void InstantiateIn(Control container)
{

LinkButton lnk = new LinkButton();

container.Controls.Add(lnk);

lnk.DataBinding += new EventHandler(lnk_DataBinding);
lnk.ID = "idx";

if (LinkButtonClick != null)
lnk.Click += new EventHandler(LinkButtonClick);

}

void lnk_Click(object sender, EventArgs e)
{
// event handler will execute now
}

void lnk_DataBinding(object sender, EventArgs e)
{

LinkButton lnk = (LinkButton)sender;
DataRowView drv =
(DataRowView)((GridViewRow)lnk.NamingContainer).Da taItem;
lnk.Text = drv[theColumnName].ToString();
//lnk.PostBackUrl = thePostBackUrl +
drv[theColumnCommandArg].ToString();

}

}

#endregion

}

--
Milosz
"Class" wrote:

Hi Milosz,

great thanks for the help I will try it.
One more thing the click event will be in the Template class.
How do I get it to be in the Page?
I want to use the LinkButtonTemplate class in more pages and grids.

Thank you.

"Milosz Skalecki [MCAD]" <mi*****@DONTLIKESPAMwp.plschreef in
bericht
news:B2**********************************@microso ft.com...
Please find fixed code below. Two things, 1. you have to create grid
on
init
event handler, 2. bind data only once (IsPostBack == false)

protected void Page_Init(object sender, EventArgs e)
{
CreateGrid();
}

public DataTable GetData()
{
DataTable t = new DataTable();

t.Columns.Add("Id", typeof(int));
t.Columns.Add("Name", typeof(string));
t.Columns.Add("Invoice", typeof(string));
t.Columns.Add("MarkID", typeof(int));

for (int i = 0; i < 10; i++)
{
string str = i.ToString();
DataRow r = t.NewRow();
r[0] = i;
r[1] = "name" + str;
r[2] = "inv" + str;
r[3] = i;
t.Rows.Add(r);
}

return t;
}

private void CreateGrid()
{
DataTable dtt = GetData();

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

Feb 25 '07 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
by: samuelberthelot | last post by:
Hi, Hi have a hyperlink column in my datagridview. How can I capture the click event on the hyperlink ? Thank you
1
by: Nam | last post by:
I have a DropDownList control in a TemplateField inside my GridView How do I access this control’s SelectedIndexChanged event in codeBehind page? I don’t see the ID “DropDownList1” of...
0
by: =?Utf-8?B?cGI2NDgxNzQ=?= | last post by:
We have been having this problem for months and always assumed it was because of our somewhat complicated setup. I have just spent almost all of today making this into a simple example that can be...
7
by: =?Utf-8?B?cGF0cmlja2RyZA==?= | last post by:
Hi all! I have a gridview inside a datagrid (nested) for which (gridview) the rowcommand is not raised in order to delete a row from the grid! I also tried OnRowCommand="method", didn't work...
0
by: David Lozzi | last post by:
Howdy, I have a gridview with a linkbutton in a template column (code is below). When the linkbutton is clicked i want to display a little confirm right in the gridview to confirm deleting the...
4
by: SEliel | last post by:
Hello everyone: I'm programming a custom GridView, adding column by column dynamically. Every column is a TemplateField, and I've made a class hierarchy for each template (TextColumnTemplate,...
0
by: baburk | last post by:
I am having dropdownlist inside gridview. When the dropdownlist selectedindex change an event should fire. What is the event for his. I also want to get the dropdownlist event fired row...
0
by: rajesh0303 | last post by:
Iam get null values in the datakeynames AlertID,ItemID while executing the Insert Command....I am Inserting using Externel button Event.Here is the code of Gridiew ,Its datasource and the button...
4
by: SAL | last post by:
Hello, I'm working, basically my first, AJAX page and am having a few problems. One is that the Click event for a button I have in UpdatePanel1 is not getting called. I've tried with the button...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development projectplanning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.