I was curious if there was a way to add a radcombobox with load on demand abilities within an exisiting radgrid. I really just need to have it that when you start typing it will then populate any items that start with the letter/numbers you are typing dynamically. For example, if I typed Batt it would autofill Battery or if I had done Serial Number it would populate all that apply. I have seen it outside of a grid but not within. In the picture below would like to have the asset_type autofill options from database that are in the asset_type column. Any examples would be great.
Imports System.Data
Imports System.Data.SqlClient
Imports System.Drawing
Imports System.Web.UI
Imports System.Configuration
Imports System.Web.UI.WebControls
Imports Telerik.Web.UI
Partial Class RadGridEditCustomValidatorVB
Inherits Page
' Page Load event
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not IsPostBack Then
RadGrid.Rebind()
End If
End Sub
' Bind the grid to the data source
Protected Sub RadGrid_NeedDataSource(sender As Object, e As GridNeedDataSourceEventArgs)
RadGrid.DataSource = GetGridSource()
End Sub
' Get data from the database
Private Function GetGridSource() As DataTable
Dim dataTable As New DataTable()
' Get the connection string from the web.config file
Dim connectionString As String = ConfigurationManager.ConnectionStrings("Data_WarehouseConnectionString_PRODUCTION").ConnectionString
Using connection As New SqlConnection(connectionString)
Dim query As String = "SELECT [ID], [Asset_type], [PortalID], [asset_SN], [asset_model], [Maint_Date], [Fill_qty], [asset_location], [Active_indicator], [Asset_Notes] FROM [data_warehouse].[dbo].[ATracker]"
Using command As New SqlCommand(query, connection)
Using adapter As New SqlDataAdapter(command)
adapter.Fill(dataTable)
End Using
End Using
End Using
Return dataTable
End Function
Protected Sub RadGrid_ItemCreated(sender As Object, e As GridItemEventArgs)
If e.Item.IsInEditMode Then
Dim item As GridEditableItem = TryCast(e.Item, GridEditableItem)
' Add validator for Asset_type (Non-nullable)
Dim assetTypeEditor As GridTextBoxColumnEditor = CType(item.EditManager.GetColumnEditor("Asset_type"), GridTextBoxColumnEditor)
AddRequiredFieldValidator(assetTypeEditor.TextBoxControl, "Asset Type")
' Add validator for PortalID (Non-nullable)
Dim portalIDEditor As GridTextBoxColumnEditor = CType(item.EditManager.GetColumnEditor("PortalID"), GridTextBoxColumnEditor)
AddRequiredFieldValidator(portalIDEditor.TextBoxControl, "PortalID")
' Add validator for asset_sn (Non-nullable)
Dim assetSNEditor As GridTextBoxColumnEditor = CType(item.EditManager.GetColumnEditor("asset_SN"), GridTextBoxColumnEditor)
AddRequiredFieldValidator(assetSNEditor.TextBoxControl, "Asset Serial Number")
' Add validator for asset_model (Non-Nullable)
Dim assetModelEditor As GridTextBoxColumnEditor = CType(item.EditManager.GetColumnEditor("asset_model"), GridTextBoxColumnEditor)
AddRequiredFieldValidator(assetModelEditor.TextBoxControl, "Asset Model")
' Add validator for asset_location (Nullable)
Dim assetLocEditor As GridTextBoxColumnEditor = CType(item.EditManager.GetColumnEditor("asset_location"), GridTextBoxColumnEditor)
AddRequiredFieldValidator(assetLocEditor.TextBoxControl, "Location")
' Add validator for Fill_qty (Nullable but must be numeric if provided)
Dim fillQtyEditor As GridTextBoxColumnEditor = CType(item.EditManager.GetColumnEditor("Fill_qty"), GridTextBoxColumnEditor)
AddNumericValidator(fillQtyEditor.TextBoxControl, "Fill Quantity")
Dim buttonName As String = If(TypeOf item Is IGridInsertItem, "PerformInsertButton", "UpdateButton")
TryCast(item.FindControl(buttonName), Button).ValidationGroup = "gridFormValidation"
End If
End Sub
Private Sub AddRequiredFieldValidator(textBox As TextBox, fieldName As String)
Dim validator As New CustomValidator()
validator.ID = "CustomValidator_" & fieldName.Replace(" ", "_")
validator.ControlToValidate = textBox.ID
validator.ValidateEmptyText = True
validator.ErrorMessage = String.Format("* {0} is required", fieldName)
validator.ForeColor = Color.OrangeRed
validator.ClientValidationFunction = "requiredFieldValidation"
validator.ValidationGroup = "gridFormValidation"
AddHandler validator.ServerValidate, AddressOf RequiredField_ServerValidate
textBox.Parent.Controls.Add(validator)
End Sub
Private Sub AddNumericValidator(textBox As TextBox, fieldName As String)
Dim validator As New CustomValidator()
validator.ID = "CustomValidator_" & fieldName.Replace(" ", "_")
validator.ControlToValidate = textBox.ID
validator.ValidateEmptyText = False
validator.ErrorMessage = String.Format("* {0} must be numeric", fieldName)
validator.ForeColor = Color.OrangeRed
validator.ClientValidationFunction = "numericFieldValidation"
validator.ValidationGroup = "gridFormValidation"
AddHandler validator.ServerValidate, AddressOf NumericField_ServerValidate
textBox.Parent.Controls.Add(validator)
End Sub
Protected Sub RequiredField_ServerValidate(source As Object, args As ServerValidateEventArgs)
args.IsValid = Not String.IsNullOrWhiteSpace(args.Value)
End Sub
Protected Sub NumericField_ServerValidate(source As Object, args As ServerValidateEventArgs)
Dim result As Decimal
args.IsValid = Decimal.TryParse(args.Value.Trim(), result)
End Sub
Protected Sub RadGrid_ItemCommand(sender As Object, e As GridCommandEventArgs)
If e.CommandName = RadGrid.UpdateCommandName Or e.CommandName = RadGrid.PerformInsertCommandName Then
If Page.IsValid Then
Dim editableItem As GridEditableItem = TryCast(e.Item, GridEditableItem)
'Runs Validation Code from RequiredField_ServerValidate and NumericField_ServerValidate
Dim txtAssetType As TextBox = CType(editableItem("Asset_type").Controls(0), TextBox)
Dim txtPortalID As TextBox = CType(editableItem("PortalID").Controls(0), TextBox)
Dim txtSerialNum As TextBox = CType(editableItem("asset_SN").Controls(0), TextBox)
Dim txtFillQty As TextBox = CType(editableItem("Fill_qty").Controls(0), TextBox)
Dim rdpMaintDate As RadDatePicker = CType(editableItem("Maint_Date").Controls(0), RadDatePicker)
Dim txtLocation As TextBox = CType(editableItem("asset_location").Controls(0), TextBox)
Dim txtModel As TextBox = CType(editableItem("asset_model").Controls(0), TextBox)
Dim chkActive As CheckBox = CType(editableItem("Active_indicator").Controls(0), CheckBox)
Dim txtNotes As TextBox = CType(editableItem("Asset_Notes").Controls(0), TextBox)
Dim objConnection As SqlConnection
Dim strSQL As String
objConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("Data_WarehouseConnectionString_PRODUCTION").ConnectionString)
'Testing DB connection
'objConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("masterConnectionString").ConnectionString)
'Determine if we are updating or inserting
If e.CommandName = RadGrid.UpdateCommandName Then
strSQL = "UPDATE [data_warehouse].[dbo].[ATracker] SET [Asset_type] = @asset_type, [PortalID] = @PortalID, [asset_SN] = @AssetSN, [Fill_qty] = @FillQty, [Maint_Date] = @MaintDate, [asset_location] = @Location, [asset_model] = @Model, [Active_indicator] = @Active, [Asset_Notes] = @Notes WHERE [ID] = @ID"
Else
strSQL = "INSERT INTO [data_warehouse].[dbo].[ATracker] ([Asset_type], [PortalID], [asset_SN], [Fill_qty], [Maint_Date], [asset_location], [asset_model], [Active_indicator], [Asset_Notes]) VALUES (@asset_type, @PortalID, @AssetSN, @FillQty, @MaintDate, @Location, @Model, @Active, @Notes)"
End If
'Add parameters to the SQL command
Dim cmd As New SqlCommand(strSQL, objConnection)
cmd.Parameters.Add("@asset_type", SqlDbType.VarChar, 20).Value = txtAssetType.Text
cmd.Parameters.Add("@ID", SqlDbType.Int).Value = If(e.CommandName = RadGrid.UpdateCommandName, editableItem.GetDataKeyValue("ID"), DBNull.Value)
cmd.Parameters.Add("@PortalID", SqlDbType.VarChar, 10).Value = txtPortalID.Text
cmd.Parameters.Add("@AssetSN", SqlDbType.VarChar, 20).Value = txtSerialNum.Text
cmd.Parameters.Add("@FillQty", SqlDbType.Int).Value = If(String.IsNullOrEmpty(txtFillQty.Text), DBNull.Value, Convert.ToInt32(txtFillQty.Text))
cmd.Parameters.Add("@MaintDate", SqlDbType.Date).Value = If(rdpMaintDate.SelectedDate Is Nothing, DBNull.Value, rdpMaintDate.SelectedDate)
cmd.Parameters.Add("@Location", SqlDbType.VarChar, 20).Value = txtLocation.Text
cmd.Parameters.Add("@Model", SqlDbType.VarChar, 20).Value = txtModel.Text
cmd.Parameters.Add("@Active", SqlDbType.Bit).Value = chkActive.Checked
cmd.Parameters.Add("@Notes", SqlDbType.VarChar, -1).Value = txtNotes.Text
Try
objConnection.Open()
cmd.ExecuteNonQuery()
Catch ex As Exception
System.Console.WriteLine(ex.ToString())
Finally
objConnection.Close()
End Try
RadGrid.Rebind()
Else
e.Canceled = True
End If
End If
End Sub
'CANT GET THIS TO TRIGGER
Protected Sub RadGrid_ItemDeleted(sender As Object, e As GridCommandEventArgs)
If e.CommandName = RadGrid.DeleteCommandName Then
Dim item As GridDataItem = TryCast(e.Item, GridDataItem)
If item IsNot Nothing Then
' Find the hidden field in the grid data item where ID is bound
Dim atID As Integer = Convert.ToInt32(item.OwnerTableView.DataKeyValues(item.ItemIndex)("ID"))
Dim objConnection As SqlConnection
Dim strSQL As String
objConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("Data_WarehouseConnectionString_PRODUCTION").ConnectionString)
' SQL command to delete the record where ID matches
strSQL = "DELETE FROM [data_warehouse].[dbo].[ATracker] WHERE [ID] = @ID"
Dim cmd As New SqlCommand(strSQL, objConnection)
cmd.Parameters.Add("@ID", SqlDbType.Int).Value = atID
Try
objConnection.Open()
cmd.ExecuteNonQuery()
Catch ex As Exception
System.Console.WriteLine(ex.ToString())
Finally
objConnection.Close()
End Try
End If
RadGrid.Rebind()
End If
End Sub
'Show a dropdown list of the asset types in the database
Protected Sub RadGrid_ItemDataBound(sender As Object, e As GridItemEventArgs)
If e.Item.IsInEditMode Then
Dim item As GridEditableItem = DirectCast(e.Item, GridEditableItem)
If Not (TypeOf e.Item Is IGridInsertItem) Then
Dim combo As RadComboBox = DirectCast(item.FindControl("Asset_type"), RadComboBox)
Dim preselectedAsset As New RadComboBoxItem()
preselectedAsset.Text = item("Asset_type").Text
preselectedAsset.Value = item("Asset_type").Text
combo.Items.Insert(0, preselectedAsset)
End If
End If
End Sub
End Class
<form id="form1" runat="server">
<telerik:RadStyleSheetManager ID="RadStyleSheetManager2" runat="server"></telerik:RadStyleSheetManager>
<telerik:RadScriptManager ID="RadScriptManager2" runat="server"></telerik:RadScriptManager>
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"></telerik:RadAjaxManager>
<telerik:RadGrid ID="RadGrid" runat="server" AllowPaging="True" Width="800px"
OnNeedDataSource="RadGrid_NeedDataSource" OnItemCommand="RadGrid_ItemCommand" onitemdatabound="RadGrid_ItemDataBound"
OnItemCreated="RadGrid_ItemCreated" OnDeleteCommand="RadGrid_ItemDeleted" Skin="MetroTouch">
<GroupingSettings CollapseAllTooltip="Collapse all groups"></GroupingSettings>
<MasterTableView AutoGenerateColumns="False" CommandItemDisplay="Top" DataKeyNames="ID">
<RowIndicatorColumn ShowNoSortIcon="False"></RowIndicatorColumn>
<ExpandCollapseColumn ShowNoSortIcon="False"></ExpandCollapseColumn>
<Columns>
<telerik:GridBoundColumn DataField="ID" DataType="System.Int32" FilterControlAltText="Filter ID column" HeaderText="ID" ReadOnly="True" SortExpression="ID" UniqueName="ID" Visible="False"></telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Asset_type" FilterControlAltText="Filter Asset_type column" HeaderText="Asset_type" SortExpression="Asset_type" UniqueName="Asset_type" ></telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="PortalID" FilterControlAltText="Filter PortalID column" HeaderText="PortalID" SortExpression="PortalID" UniqueName="PortalID"></telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="asset_SN" FilterControlAltText="Filter asset_SN column" HeaderText="Serial Number" SortExpression="asset_SN" UniqueName="asset_SN"></telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="asset_model" FilterControlAltText="Filter asset_model column" HeaderText="Model" SortExpression="asset_model" UniqueName="asset_model"></telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="asset_location" FilterControlAltText="Filter asset_location column" HeaderText="Location" SortExpression="asset_location" UniqueName="asset_location"></telerik:GridBoundColumn>
<telerik:GridDateTimeColumn DataField="Maint_Date" FilterControlAltText="Filter Maint_Date column" HeaderText="Date of Service" SortExpression="Maint_Date" UniqueName="Maint_Date"></telerik:GridDateTimeColumn>
<telerik:GridBoundColumn DataField="Fill_qty" FilterControlAltText="Filter Fill_qty column" HeaderText="Fill Qty (Gallons)" SortExpression="Fill_qty" UniqueName="Fill_qty"></telerik:GridBoundColumn>
<telerik:GridCheckBoxColumn DataField="Active_indicator" DataType="System.Boolean" FilterControlAltText="Filter Active_indicator column" HeaderText="Active?" SortExpression="Active_indicator" UniqueName="Active_indicator"></telerik:GridCheckBoxColumn>
<telerik:GridBoundColumn DataField="Asset_Notes" FilterControlAltText="Filter Notes column" HeaderText="Notes" SortExpression="Asset_Notes" UniqueName="Asset_Notes"></telerik:GridBoundColumn>
<telerik:GridEditCommandColumn EditText="Edit" />
<telerik:GridButtonColumn ConfirmText="Are you sure you want to delete this record?" ConfirmDialogType="RadWindow" ConfirmTitle="Delete" CommandName="Delete" Text="Delete" />
</Columns>
</MasterTableView>
</telerik:RadGrid>
</form>