I have an UltraWebGrid (below) that is dynamically bound by Dataset server-side. I need it to have a row edit template with textbox, dropdownlist, and datepicker. I have several problems: 1) I cannot initialize the controls, like prefilling the dropdownlist, 2) I cannot set the initial values to the controls or get the changed values from them, 3) I have to do everything server-side in the code-behind, I cannot manipulate the data client-side, so no javascript. I've tried the various grid methods like updaterow, updategrid, etc., but cannot capture the right event(s). I am using vb.net 2008 with ig controls v10.3.20103.2134. I also cannot use the newer WebDataGrid, this has to be UltraWebGrid for now. I need to have something working correctly soon, so any help or simple example would be hugely appreciated. Thanks so much.
<igtbl:UltraWebGrid ID="igGrid" runat="server" DisplayLayout-AutoGenerateColumns="true"EnableAppStyling="True" StyleSetName="Office2007Blue" StyleSetPath="~/ig_res/"DisplayLayout-CellPaddingDefault="5" DisplayLayout-AllowSortingDefault="No"><Bands><igtbl:UltraGridBand><AddNewRow View="NotSet" Visible="NotSet"></AddNewRow></igtbl:UltraGridBand></Bands><DisplayLayout BorderCollapseDefault="Separate" CellPaddingDefault="5" Name="igStop" RowHeightDefault="20px" Version="4.00" CellClickActionDefault="Edit" AllowUpdateDefault="Yes"><FrameStyle></FrameStyle><ActivationObject BorderColor="" BorderWidth=""></ActivationObject></DisplayLayout></igtbl:UltraWebGrid>
Hello dbishop9,
Thank you for posting in our forum.
If you don’t want to use any JS you’ll have to use the WebDateChooser control instead of the WebDatePicker since the latter is part of the Akido controls set and is better integrated with the new WebDataGrid .You can still use it but you’ll have to handle client side events to get and set the value of the corresponding cell you want to edit. For the WebDateChooser these client side events are already handled so you don’t need to write additional JS.
I’m attaching a sample for your reference. Please test it on your side and let me know if you have any concerns or questions.
Best Regards,
Maya Kirova
Developer Support Engineer
Infragistics, Inc.
http://es.infragistics.com/support
Maya, below is what I have (it won't let me add an attachment). I have a couple of problems; 1) the edit template is aligned to the top of the row, not the bottom, which causes part of it to be off screen and it won't scroll up, 2) the dropdowns are not popluated. I followed your example, but I must not be doing something right. Please help. Also, how do I get the data from the controls in the edit template? Thanks
<igtbl:UltraWebGrid ID="igAction" runat="server" EnableAppStyling="True" StyleSetName="Office2007Blue" StyleSetPath="~/ig_res/" DisplayLayout-CellPaddingDefault="5" OnUpdateRow="igActions_UpdateRow"><Bands><igtbl:UltraGridBand><Columns><igtbl:UltraGridColumn BaseColumnName="ID" Key="ID"></igtbl:UltraGridColumn><igtbl:UltraGridColumn BaseColumnName="Process" Key="Process"><Header><RowLayoutColumnInfo OriginX="2" /></Header><Footer><RowLayoutColumnInfo OriginX="2" /></Footer></igtbl:UltraGridColumn><igtbl:UltraGridColumn BaseColumnName="Action Item" Key="Action Item"><Header><RowLayoutColumnInfo OriginX="3" /></Header><Footer><RowLayoutColumnInfo OriginX="3" /></Footer></igtbl:UltraGridColumn><igtbl:UltraGridColumn BaseColumnName="Action Type" Key="Action Type"><Header><RowLayoutColumnInfo OriginX="4" /></Header><Footer><RowLayoutColumnInfo OriginX="4" /></Footer></igtbl:UltraGridColumn><igtbl:UltraGridColumn BaseColumnName="Status" Key="Status"><Header><RowLayoutColumnInfo OriginX="5" /></Header><Footer><RowLayoutColumnInfo OriginX="5" /></Footer></igtbl:UltraGridColumn><igtbl:UltraGridColumn BaseColumnName="Assigned To" Key="Assigned To"><Header><RowLayoutColumnInfo OriginX="6" /></Header><Footer><RowLayoutColumnInfo OriginX="6" /></Footer></igtbl:UltraGridColumn><igtbl:UltraGridColumn BaseColumnName="Due Date" Key="Due Date" Format="MM/dd/yyyy"><Header><RowLayoutColumnInfo OriginX="7" /></Header><Footer><RowLayoutColumnInfo OriginX="7" /></Footer></igtbl:UltraGridColumn><igtbl:UltraGridColumn BaseColumnName="Completion Date" Key="Completion Date" Format="MM/dd/yyyy"><Header><RowLayoutColumnInfo OriginX="8" /></Header><Footer><RowLayoutColumnInfo OriginX="8" /></Footer></igtbl:UltraGridColumn><igtbl:UltraGridColumn BaseColumnName="DATE" Key="DATE"><Header><RowLayoutColumnInfo OriginX="9" /></Header><Footer><RowLayoutColumnInfo OriginX="9" /></Footer></igtbl:UltraGridColumn></Columns><RowEditTemplate><p align="left"><asp:DropDownList ID="ddlActionProcess" runat="server" columnkey="Process" DataTextField="Process" OnInit="ddlActionProcess_Init"></asp:DropDownList><input id="txtActionItem" columnkey="Action Item" style="width:150px;" type="text" /><asp:DropDownList ID="ddlActionItem" runat="server" columnkey="Action Item" DataTextField="Action Item"OnInit="ddlActionItem_Init"></asp:DropDownList><asp:DropDownList ID="ddlActionStatus" runat="server" columnkey="Status" DataTextField="Status"OnInit="ddlActionStatus_Init"></asp:DropDownList><input id="txtActionAssignedTo" columnkey="Assigned To" style="width: 100px;" type="text" /><igsch:WebDateChooser ID="igActionDueDate" columnkey="Due Date" runat="server" NullDataLabel="Select a Date" Format="Short" OnInit="igActionDueDate_Init"></igsch:WebDateChooser><igsch:WebDateChooser ID="igActionCompletionDate" columnkey="Completion Date" runat="server" NullDataLabel="Select a Date"Format="Short" OnInit="igActionCompletionDate_Init"></igsch:WebDateChooser><igsch:WebDateChooser ID="igActionDate" columnkey="DATE" runat="server"NullDataLabel="Select a Date" Format="Short" OnInit="igActionDate_Init"></igsch:WebDateChooser><br /><br /></p><br /><p align="center" ><input id="igAction_reOkBtn" onclick="igAction_gRowEditButtonClick(event);" style="width: 50px;"type="button" value="OK"> <input id="igAction_reCancelBtn" onclick="igAction_gRowEditButtonClick(event);" style="width: 50px;"type="button" value="Cancel"> </input></input></p></RowEditTemplate><AddNewRow View="NotSet" Visible="NotSet"></AddNewRow></igtbl:UltraGridBand></Bands><DisplayLayout Name="igAction" AllowDeleteDefault="Yes" AllowSortingDefault="No" AllowUpdateDefault="RowTemplateOnly" BorderCollapseDefault="Separate" CellPaddingDefault="5" AutoGenerateColumns="false" RowSelectorsDefault="No" RowHeightDefault="20px" Version="4.00" CellClickActionDefault="Edit" SelectTypeRowDefault="Extended" StationaryMargins="Header" TableLayout="Fixed" ><FrameStyle></FrameStyle><ActivationObject BorderColor="" BorderWidth=""></ActivationObject></DisplayLayout></igtbl:UltraWebGrid>
********************************************************
Imports SystemImports System.DataImports System.Data.SqlClientImports System.Collections.GenericImports System.WebImports System.Web.UIImports System.Web.UI.WebControlsImports InfragisticsImports Infragistics.WebUIImports Infragistics.WebUI.UltraWebGridImports Infragistics.WebUI.WebSchedule
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadSetSubtitle()If Not IsPostBack ThenResponse.Cache.SetNoServerCaching()Response.Cache.SetCacheability(HttpCacheability.NoCache)ClearCache()LoadData()End If
End Sub Private Sub LoadData()Dim ds As New DataSetTryds = GetActionDataSet()igAction.DataSource = dsigAction.DataBind()Catch ex As ExceptionEnd TryEnd Sub
Protected Sub igActionProcess_Init(ByVal sender As Object, ByVal e As EventArgs)TryDim d As DropDownList = DirectCast(sender, DropDownList)Dim ds As New DataSet
ds = GetDataSet("processes)If IsDatasetValid(ds) Thend.DataSource = dsd.DataBind()End IfCatch ex As ExceptionEnd TryEnd Sub
Protected Sub igActionType_Init(ByVal sender As Object, ByVal e As EventArgs)Dim d As DropDownList = DirectCast(sender, DropDownList)Dim ds As New DataSet
TryTryds = GetDataSet("actiontypelist")If IsDatasetValid(ds) Thend.DataSource = dsd.DataBind()End IfCatch ex As ExceptionEnd TryCatch ex As ExceptionEnd TryEnd Sub
Protected Sub igActionStatus_Init(ByVal sender As Object, ByVal e As EventArgs)Dim d As DropDownList = DirectCast(sender, DropDownList)Dim ds As New DataSet
TryTryds = GetDataSet("statuslist")If IsDatasetValid(ds) Thend.DataSource = dsd.DataBind()End IfCatch ex As ExceptionEnd TryCatch ex As ExceptionEnd TryEnd Sub
Protected Sub igActionDueDate_Init(ByVal sender As Object, ByVal e As EventArgs)TryDim c As WebDateChooser = DirectCast(sender, WebDateChooser)c.Format = DateFormat.ShortCatch ex As ExceptionEnd TryEnd Sub
Protected Sub igActionCompletionDate_Init(ByVal sender As Object, ByVal e As EventArgs)TryDim c As WebDateChooser = DirectCast(sender, WebDateChooser)c.Format = DateFormat.ShortCatch ex As ExceptionEnd TryEnd Sub
Protected Sub igActionDate_Init(ByVal sender As Object, ByVal e As EventArgs)TryDim c As WebDateChooser = DirectCast(sender, WebDateChooser)c.Format = DateFormat.ShortCatch ex As ExceptionEnd TryEnd Sub
Protected Sub igAction_UpdateRow(ByVal sender As Object, ByVal e As Infragistics.WebUI.UltraWebGrid.RowEventArgs)
End Sub
By default the values should be automatically prefilled when you set the columnkey property of the controls in the RowEditTemplate. This is getting set trough some ig java scripts and will set the current value automatically for all simple controls like text boxes, DropDownLists and so on. For controls like the WebDateChooser you might have to manually set the current value based on the current row you’re editing. Do you experience a different behavior when you set the columnkey property?
They are all working as expected, however, the WebDateChoosers (see below) are showing Null when there is no date. I have set the NullDataLabel="Select a Date', but it still shows null. I've also tried to set it in the InitializeRow method to an empty value, but it doesn't work either. Not sure what I need to do.
<igsch:WebDateChooser ID="igDueDate" columnkey="Due Date" runat="server"EnableAppStyling="True" Section508Compliant="true" StyleSetName="Office2007Blue" StyleSetPath="~/ig_res/" NullDataLabel="Select a Date" AllowNull="false" Format="Short" ></igsch:WebDateChooser>
Dim dtDueDate As Infragistics.WebUI.WebSchedule.WebDateChooser = igActions.Bands(0).RowEditItem.FindControl("igDueDate")If IsDate(e.Row.Cells(6).Text) = True ThenIf CDate(e.Row.Cells(6).Text) <= CDate("1/1/2000") Thene.Row.Cells(6).Text = " "dtDueDate.Value = ""ElsedtDueDate.Value = CDate(e.Row.Cells(6).Text)End IfElsedtDueDate.Value= ""End If
In my sample when I set the AllowNull to false it by default sets the current date. If I set: NullDateLabel="Select a date" AllowNull="true" then it shows the “Select a date" message.
Try setting it like this as well let me know what result it gives on your side.
Yes, thanks. It would help if I could spell...lol. I had it spelled NullDataLabel and didn't notice it. The last item I need help with, is that I still can't get my Add Rows to work. It displays, but I have no idea how to template it or where to template it, or how to activate it. Can you help with this last item. Thanks soooooo much for you patience and help.
Do you mean that you want to use a similar template for the adding of a new row?
You’ll to use the RowEditTemplate for this as well. However you’ll have to use JS to manually open the template in the AfterRowInsertHandler.
Here’s an example:
var keepOpen=false;
function UltraWebGrid1_AfterRowInsertHandler(gridName, rowId, index) {
//Add code to handle your event here.
keepOpen=true;
var grid = igtbl_getGridById("UltraWebGrid1");
var row = grid.Rows.getRowById(rowId);
row.editRow();
}
// -->
function UltraWebGrid1_BeforeRowTemplateCloseHandler(gridName, rowId, bSaveChanges){
if(keepOpen)
{
keepOpen=false;
return true;
I use the keepOpen global variable so that I can cancel the closing of the template since it’ll try to close the template right after you manually open it for some reason.
Please refer to the attached sample and let me know if this is the behavior you’re after.
Thank you for sharing your approach.
I’m glad that you managed to resolved your issue.
Let me know if you have any further need of assistance with this issue.
Hi Maya. I have resolved the issue on my own. While this may not be the "best" way to do it, it is the only one so far that has worked for me. In the BeforeRowTemplateOpenHandler, just before I assign the cell's date value to the WebDateChooser, I manually format the UTC date by using a bit of free javascript from the following link rather than spending time building my own formatting function.(I don't know if it's okay to include an outside link or not).
http://blog.stevenlevithan.com/archives/date-time-format
So now my code is:
function igMyGrid_BeforeRowTemplateOpenHandler(gridName, rowId, templateId) { var row = igtbl_getRowById(rowId); var currentValDueDate = row.getCell(1).getValue(); var currentValueCompletedDate = row.getCell(6).getValue(); currentValDueDate = dateFormat(currentValDueDate, "mm/dd/yyyy"); currentValueCompletedDate = dateFormat(currentValueCompletedDate, "mm/dd/yyyy"); dateChooserDueDate.value = currentValDueDate; dateChooserDueDate.inputBox.value = currentValDueDate; dateChooserCompletedDate.value = currentValueCompletedDate; dateChooserCompletedDate.inputBox.value = currentValueCompletedDate;}
function igMyGridDueDate_InitializeDateChooser(oDateChooser) { dateChooserDueDate = oDateChooser;}function igMyGridCompletedDate_InitializeDateChooser(oDateChooser) { dateChooserCompletedDate = oDateChooser;
This now makes the WebDateChooser display the initial date value as 02/01/2012, as I need it to to fulfill the requirements. Again, I'm still not sure what I have set or not set that was causing the previous methods to fail, but this overrides that and gives me the expected result I need.
Here is what I have in both HTML & code. How do I set the culture?
<igsch:WebDateChooser ID="igDueDate" runat="server" EnableAppStyling="True" Section508Compliant="true" StyleSetName="Office2007Blue" Format="Short" DisplayModeFormat="d" EditModeFormat="d" StyleSetPath="~/ig_res/" NullDateLabel="Select a Date"AllowNull="true" ClientSideEvents-InitializeDateChooser ="igDueDate_InitializeDateChooser"></igsch:WebDateChooser>
With e.Layout.Bands(0).Columns.FromKey("DATE").Header.Caption = "Due Date".DataType = "System.DateTime".Format = "MM/dd/yyyy".Header.Style.HorizontalAlign = HorizontalAlign.Center.CellStyle.HorizontalAlign = HorizontalAlign.Center.Width = Unit.Pixel(75)End With
Hello dbishop9 ,
Have you tried setting the ShortDatePattern with:
c.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
Where c is the current culture info.
Also you need to set for the Format prorty of the WebDateChooser to Short. For example:
<igsch:WebDateChooser ID="WebDateChooser1" columnkey="Data" runat="server" AllowNull="false" Format="Short" OnInit="WebDateChooser1_Init">
<ClientSideEvents InitializeDateChooser="WebDateChooser1_InitializeDateChooser">
</ClientSideEvents>
</igsch:WebDateChooser>
Hi Maya, That was the problem. I didn't know I had to actually initialize the clent-side events. I haven't had to do that for other controls. Thanks so much. I still can't get the display/text format to work. I've set the display format to "d" and it works after I've selected a date, but for the initial date it shows the Fri Sept 30 00:00:00 CDT 2011 format. I've set it in the control, in the code-behind on row initalize and control initialize, but nothing seems to work. I've even captured the value from the grid cell, formatting it, then assigned it to the control, but it still fails. This will keep me from using the grid, because the date has to initially display as mm/dd/yyyy. Any ideas?