Hi allI have a WebDataGrid, I fill it in .aspx.ch like ".DataSource = SomeDataTable".The last column is empty and I like to have a button there on each row.OnClick I need to read some informations about the current row.I guess this should be done with TemplateDataField.How can I do this in the code behind after setting the DataSource ?Thanks and best regardsFrank Uray
Hello Frank,Please take a look at the created from me sample with NetAdvantage 11.2.20112.2055. The grid implements the scenario form the following page of our online help - http://help.infragistics.com/Help/NetAdvantage/ASPNET/2011.2/CLR4.0/html/WebDataGrid_Using_Item_Template.html
Hi NikiforThanks for your answer.When set the datasource like this:this.WebDataGrid_JobControl_Sessions.DataSource = SomeTable;this.WebDataGrid_JobControl_Sessions.DataBind();I get the grid in the browser.When I add the following lines after this, there is no grid displayed any more: TemplateDataField field1 = new TemplateDataField(); field1.Key = "TemplateColumn1"; field1.Header.Text = "Edit"; this.WebDataGrid_JobControl_Sessions.Columns.Add(field1);
What am I doing wrong ??Thanks and best regardsFrank Uray
Hello NikiforI have tried also with your javascript function,but this also does not work ...I also tried this, but also does not work,I get Javascript exception "Microsoft JScript runtime error: Object expected": <script type="text/C#" runat="server"> void Button_Cancel_Click(object sender, EventArgs e) { System.Windows.Forms.MessageBox.Show("Test"); } </script> public void InstantiateIn(System.Web.UI.Control container) { System.Web.UI.WebControls.Button _Button_Cancel = new System.Web.UI.WebControls.Button(); _Button_Cancel.Height = 25; _Button_Cancel.Width = 60; _Button_Cancel.Text = "Cancel"; _Button_Cancel.OnClientClick = "Button_Cancel_Click();"; container.Controls.Add(_Button_Cancel); }
RegardsFrank
Hello Frank,In the attached from me sample there are client side even onClick handled. The javascript function should be named with the default name which is given when you add this event from the designer. When the javascript function is named like “myJavaScriptHandler” some of the browsers may not handle it. Please look at the attached sample how I have added the function in the client and set it to the button in the code behind.
Hi NikiforI have seen this, but I need the event raised in the C# CodeBehind.Thanks and regardsFrank Uray
Hello Frank,This is the modified sample. You have the event += to the button and at the moment when you press the button you get an exception. Please modify the body of the function to match your goals. Please also take a note that this event is outside the page so you dont have access to the controls.
Hi NikiforNo, it still does not work ...I can press the button without getting a exception,but the event is not raised ... and after pressing thebutton, the grid is empty ...
public
void InstantiateIn(System.Web.UI.Control container)
{
System.Web.UI.WebControls.
Button _Button_Cancel = new System.Web.UI.WebControls.Button();
_Button_Cancel.Height = 25;
_Button_Cancel.Width = 60;
_Button_Cancel.Text =
"Cancel";
//_Button_Cancel.OnClientClick = "Button_Cancel_Click();";
_Button_Cancel.Click +=
(button_Click);
container.Controls.Add(_Button_Cancel);
}
e)
Hello Frank,
Please let me know if you have any further questions regarding this issue. Did you manage to resolve it?
Hello Frank,Did you have the chance to test my suggestion? When you have auto generated columns they are not available through grid.Columns - this collection is containing only the columns added through the mark up or added through the server side code. You are adding only the template column. The other 3 are auto generated. In initializeRow event you are available to manipulate the columns by getting them through the row items as shown. The first items are the added columns and they will be at the beginning of the collection. At the end of the collection are the 3 autogenerated columns. You can set the last column (3 )to be with visibility false and to set the first column which is your template column to be with last visible index like
e.Row.Items[3].Column.Hidden = true;
e.Row.Items[0].Column.VisibleIndex = 3;
The null exception was because you are looking for the button in the autogenerated column not in the template one.
Please let me know if this answer makes any sense.
Hi NikiforThanks for your answer.Well, I really dont unterstand this concept ???When I set VisibleIndex I get one column called Button without a buttonand another column also called Button with the button.All I need to do is:I am getting a datatable from the sql server.I set DataSource and DataBind of the grid.The last column of the datatable is always empty and thereI need to have a button.On button click, in the event (code behind)I need to identify the current row to get some values out of it.RegardsFrank Uray
Hello Frank,You are getting this exception because the btn is null. IT is null because the last column is not containing it. If what you are trying to achieve is to set the column with the button to be last shown you can set the visible index of the column like this:private void WebDataGrid_Test_InitializeRow(object sender, Infragistics.Web.UI.GridControls.RowEventArgs e)
e.Row.Items[0].Column.Hidden = false;
e.Row.Items[1].Column.Hidden = false;
// e.Row.Items[2].TemplateId = "ActionButtons";
e.Row.Items[2].Column.Width = 100;
e.Row.Items[3].Column.Hidden = false;
Button btn = (Button)e.Row.Items[0].FindControl("_Button_Cancel_ID");
btn.CommandArgument = e.Row.Index.ToString();
btn.CommandName = "Cancel";
Hi NikiforTry to put the button to the last column: e.Row.Items[3].Column.Hidden = false; Button btn = (Button)e.Row.Items[3].FindControl("_Button_Cancel_ID");
There will be an exception raised: "Object reference not set to an instance of an object."on the line:btn.CommandArgument = e.Row.Index.ToString();
Thanks and best regardsFrank Uray