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 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
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
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)
{
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)
{
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);
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); This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
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
|
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...
|
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...
|
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...
|
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...
|
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,...
|
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...
|
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...
|
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...
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
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...
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
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...
|
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,...
|
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,...
|
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...
|
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,...
|
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...
| |