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
Hi NikiforI am using: "Infragistics4.Web.v11.2, Version=11.2.20112.2025".I did not paste the code in your sample, I am basicly doing the same.Following I send you my code.Thanks and best regardsFrank Uray
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace rch.zb.rms.web._standard { public partial class JobControl_Sessions : System.Web.UI.Page { private _classes.clsVariables _clsVariables = new _classes.clsVariables(); protected void Page_Load(object sender, EventArgs e) { try { this.Title = _classes.clsVariables.static_Title; if (!Page.IsPostBack) { // Check Request.QueryString if (Request.QueryString.Count == 0) { System.Web.HttpContext _HttpContext = System.Web.HttpContext.Current; _HttpContext.Items.Add(_classes.clsVariables.static_ErrorMessageKey, "No menu was selected ..."); _HttpContext.Items.Add(_classes.clsVariables.static_ErrorDescriptionKey, ""); Server.Transfer("../Error.aspx", false); return; } // End: if // Initialize _clsVariables.Initialize(); // Variables symmetric.processing.foundation._parameter.clsParameter _clsParameter = new symmetric.processing.foundation._parameter.clsParameter(); symmetric.processing.foundation._dynamic.clsDynamic _clsDynamic = new symmetric.processing.foundation._dynamic.clsDynamic(); int _MenuItemID = System.Convert.ToInt32(Request.QueryString["MenuItemID"].ToString()); string _Query = ""; this.WebDataGrid_JobControl_Sessions.InitializeRow -= new Infragistics.Web.UI.GridControls.InitializeRowEventHandler(WebDataGrid_JobControl_Sessions_InitializeRow); this.WebDataGrid_JobControl_Sessions.InitializeRow += new Infragistics.Web.UI.GridControls.InitializeRowEventHandler(WebDataGrid_JobControl_Sessions_InitializeRow); // Get Parameter System.Data.DataTable _DataTable_Parameters = _clsParameter.GetParameters(ref ((_classes.clsVariables)Session["clsVariables"]).public_clsSQLServer, _MenuItemID); System.Data.DataView _DataView_Parameters = new System.Data.DataView(_DataTable_Parameters); // Title _DataView_Parameters.RowFilter = "Name = 'Title'"; if (_DataView_Parameters.Count == 1) { this.Title = _DataView_Parameters[0]["Value"].ToString(); } _Query = "SELECT [Fld_PK] AS [ID], "; _Query += " [Fld_FK_Jobs] AS [FK_Jobs], "; _Query += " (SELECT [Fld_JobName] "; _Query += " FROM [_JOBCONTROL].[dbo].[Tbl_Jobs] "; _Query += " WHERE [Fld_PK] = js.[Fld_FK_Jobs]) AS [JobName], "; _Query += " [Fld_RunningCounter] AS [RunningCounter], "; _Query += " [Fld_ThreadID] AS [ThreadID], "; _Query += " [Fld_Cancel] AS [Cancel], "; _Query += " null AS [Action] "; _Query += "FROM [_JOBCONTROL].[dbo].[Tbl_Jobs_Sessions] js"; this.WebDataGrid_JobControl_Sessions.DataSource = ((_classes.clsVariables)Session["clsVariables"]).public_clsSQLServer.GetDataTable(_Query); if (((System.Data.DataTable)this.WebDataGrid_JobControl_Sessions.DataSource).Rows.Count != 0) { this.WebDataGrid_JobControl_Sessions.DataBind(); } else { this.WebDataGrid_JobControl_Sessions.DataSource = null; } Infragistics.Web.UI.GridControls.TemplateDataField field1 = new Infragistics.Web.UI.GridControls.TemplateDataField(); field1.Key = "TemplateColumn1"; field1.Header.Text = "Edit"; this.WebDataGrid_JobControl_Sessions.Columns.Add(field1); } // End: if } // End: try catch (Exception ex) { System.Web.HttpContext _HttpContext = System.Web.HttpContext.Current; if (!_HttpContext.Items.Contains(_classes.clsVariables.static_ErrorMessageKey)) { _HttpContext.Items.Add(_classes.clsVariables.static_ErrorMessageKey, ex.Message); } else { _HttpContext.Items[_classes.clsVariables.static_ErrorMessageKey] = ex.Message; } if (!_HttpContext.Items.Contains(_classes.clsVariables.static_ErrorDescriptionKey)) { _HttpContext.Items.Add(_classes.clsVariables.static_ErrorDescriptionKey, ex.Message); } else { _HttpContext.Items[_classes.clsVariables.static_ErrorDescriptionKey] = ex.Message; } Server.Transfer("../Error.aspx", false); } // End: catch } private void WebDataGrid_JobControl_Sessions_InitializeRow(object sender, Infragistics.Web.UI.GridControls.RowEventArgs e) { e.Row.Items[0].Column.Hidden = true; e.Row.Items[1].Column.Hidden = true; e.Row.Items[3].Column.Hidden = true; e.Row.Items[4].Column.Hidden = true; e.Row.Items[5].Column.Hidden = true; } } }
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="JobControl_Sessions.aspx.cs" Inherits="rch.zb.rms.web._standard.JobControl_Sessions" %> <%@ Register Assembly="Infragistics4.Web.v11.2, Version=11.2.20112.2025, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" Namespace="Infragistics.Web.UI" TagPrefix="ig" %> <%@ Register Assembly="Infragistics4.Web.v11.2, Version=11.2.20112.2025, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" Namespace="Infragistics.Web.UI.GridControls" TagPrefix="ig" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <meta http-equiv="refresh" content="5"/> </head> <body> <form id="form1" runat="server"> <div> <ig:WebScriptManager ID="WebScriptManager_JobControl_Sessions" runat="server"></ig:WebScriptManager> <ig:WebDataGrid ID="WebDataGrid_JobControl_Sessions" runat="server" Height="100%" Width="100%" StyleSetName="Windows7" AutoGenerateColumns="True"> <ig:Columns> <ig:TemplateDataField Key="Action"> <ItemTemplate> <asp:Button ID="TestButton" runat="server" Text="TestButton" /> </ItemTemplate> </ig:TemplateDataField> </ig:Columns> </ig:WebDataGrid> </div> </form> </body> </html>
Hello Frank,Please take a look at the sample I attached. You have to add the template column in the templates collection of the grid in page Init event. Also the template is added for every row in initializeRow event not in the columns of the grid.
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,
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