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 Frank,
The event was not firing due to the way you are trying to set the template. I am attaching the modified sample with the event firing. It is not possible to have the row index in the click event which is defined in class in which this control is not defined. I have modified the InitializeRow event to keep the row index and when the ItemCommand you can get the index of the selected row. This is the reccomended approach for ASP.
Thanks for your answer.This only works because you are duplicating the columns ...When you do this, it does not work any more: if (!IsPostBack) { //BoundDataField bf = new BoundDataField(); //bf.Key = "Column01"; //bf.DataFieldName = "Column01"; //bf.Header.Text = "Column01"; //this.WebDataGrid_Test.Columns.Add(bf); //bf = new BoundDataField(); //bf.Key = "Column02"; //bf.DataFieldName = "Column02"; //bf.Header.Text = "Column02"; //this.WebDataGrid_Test.Columns.Add(bf); //TemplateDataField tf = new TemplateDataField(); //tf.Key = "Button"; //tf.Header.Text = "Button"; //this.WebDataGrid_Test.Columns.Add(tf); }
In my case, the data is coming from a database and I only knowI will have a empty column called "Action". There the button should be.All other columns are dynamicly and I dont know while design time.RegardsFrank
Hello Frank,I have mistaken with my previous response. I am sending you the sample again. I contains the event with the string which is the index of the row. It also contains only one created column which will be templated. Others are auto generated. As you mentioned you know only one control please create it as a template. It will allow you to achieve the desired scenario. In order to prevent duplicating the column when autogenerate creates all the column you can hide the autogenerated column as shown in the sample. If you want to order the columns in a specific way please adjust the visible index property.
Hi NikiforI have tried to run your sample,but it does not work, just a blank screen is shown ...I am using the 20112.2025 assemblies: <add assembly="Infragistics4.Web.v11.2, Version=11.2.20112.2025, Culture=neutral, PublicKeyToken=7DD5C3163F2CD0CB" /> <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> <add assembly="Infragistics4.WebUI.Documents.Reports.v11.2, Version=11.2.20112.2025, Culture=neutral, PublicKeyToken=7DD5C3163F2CD0CB" /> <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" /> <add assembly="Infragistics4.WebUI.Documents.Excel.v11.2, Version=11.2.20112.2025, Culture=neutral, PublicKeyToken=7DD5C3163F2CD0CB" /> <add assembly="Infragistics4.WebUI.Documents.Word.v11.2, Version=11.2.20112.2025, Culture=neutral, PublicKeyToken=7DD5C3163F2CD0CB" /> <add assembly="Infragistics4.WebUI.Documents.IO.v11.2, Version=11.2.20112.2025, Culture=neutral, PublicKeyToken=7DD5C3163F2CD0CB" />Here I send you the modified (only assemblies) solution.RegardsFrank
Hello Frank,I just downloaded the sample and tested it. I could not reproduce the issue with IE. Please ensure that you have added the Windows 7 theme in our ig_res folder. This might be causing the issue. I have removed the ig_res folder in order to lower the size of the archived file.
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