Hello,
I am using RadGrid in which I have used the gridclientdeletecolumn to delete the row from client side.
But the problem i have here is, if i have 2 rows in my grid and if i delete one row and when i try to save the page, in code behind i see the radgrid row count as 0 even though there is one row left.
Here is the code overview:
<telerik:GridClientDeleteColumn ConfirmText="Are you sure you want to delete"
HeaderStyle-Width="35px" ButtonType="ImageButton" ImageUrl="Delete.gif" />
I have tried adding this but no luck.. <MasterTableView AlloAutomaticDeletes ="True" DataKeyNames = "Number">
P.S: I have this radgrid inside the update panel.
Thanks
I am using RadGrid in which I have used the gridclientdeletecolumn to delete the row from client side.
But the problem i have here is, if i have 2 rows in my grid and if i delete one row and when i try to save the page, in code behind i see the radgrid row count as 0 even though there is one row left.
Here is the code overview:
<telerik:GridClientDeleteColumn ConfirmText="Are you sure you want to delete"
HeaderStyle-Width="35px" ButtonType="ImageButton" ImageUrl="Delete.gif" />
I have tried adding this but no luck.. <MasterTableView AlloAutomaticDeletes ="True" DataKeyNames = "Number">
P.S: I have this radgrid inside the update panel.
Thanks
10 Answers, 1 is accepted
0

Richard
Top achievements
Rank 1
answered on 27 Jan 2012, 05:24 PM
Yash:
Can you post your .aspx and your code behind? This would help to determine what's happening.
Also, there's a typo in the markup snippet, not sure if it's in your actual code:
<MasterTableView AlloAutomaticDeletes ="True" DataKeyNames = "Number">
Should be: <MasterTableView AllowAutomaticDeletes ="True" DataKeyNames = "Number">
Cheers!
Can you post your .aspx and your code behind? This would help to determine what's happening.
Also, there's a typo in the markup snippet, not sure if it's in your actual code:
<MasterTableView AlloAutomaticDeletes ="True" DataKeyNames = "Number">
Should be: <MasterTableView AllowAutomaticDeletes ="True" DataKeyNames = "Number">
Cheers!
0

Jagat
Top achievements
Rank 1
answered on 01 Feb 2012, 12:46 AM
Hello Jumpstart,
That was just a typo in my post. It is fine in actual code.
Here is the aspx
Here is the code behind:
That was just a typo in my post. It is fine in actual code.
Here is the aspx
<
asp:UpdatePanel
ID
=
"UpdatePanel2"
runat
=
"server"
UpdateMode
=
"Conditional"
>
<
Triggers
>
<
asp:AsyncPostBackTrigger
ControlID
=
"ButtonAdd"
/>
<
asp:AsyncPostBackTrigger
ControlID
=
"btnShow"
/>
<
asp:AsyncPostBackTrigger
ControlID
=
"btnHide"
/>
</
Triggers
>
<
ContentTemplate
>
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AutoGenerateColumns
=
"False"
Height
=
"250px"
DataKeyName
=
"Number"
AllowAutomaticDeletes
=
"true"
CellSpacing
=
"0"
GridLines
=
"None"
ShowFooter
=
"True"
Skin
=
"Vista"
Width
=
"1610px"
>
<
HeaderContextMenu
CssClass
=
"GridContextMenu GridContextMenu_Default"
>
<
WebServiceSettings
>
<
ODataSettings
InitialContainerName
=
""
>
</
ODataSettings
>
</
WebServiceSettings
>
</
HeaderContextMenu
>
<
MasterTableView
AllowAutomaticDeletes
=
"True"
DataKeyNames
=
"Number"
>
<
CommandItemSettings
ExportToPdfText
=
"Export to PDF"
/>
<
RowIndicatorColumn
FilterControlAltText
=
"Filter RowIndicator column"
Visible
=
"True"
>
</
RowIndicatorColumn
>
<
ExpandCollapseColumn
FilterControlAltText
=
"Filter ExpandColumn column"
Visible
=
"True"
>
</
ExpandCollapseColumn
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"Number"
ReadOnly
=
"True"
>
</
telerik:GridBoundColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"FirstName"
UniqueName
=
"MemFirstName"
>
<
ItemTemplate
>
<
asp:TextBox
ID
=
"txtMemFName"
runat
=
"server"
ToolTip
=
"Member FirstName"
CssClass
=
"Text"
Width
=
"80px"
>
</
asp:TextBox
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"LastName"
UniqueName
=
"MemLastName"
>
<
ItemTemplate
>
<
asp:TextBox
ID
=
"txtMemLName"
runat
=
"server"
ToolTip
=
"Member LastName"
CssClass
=
"Text"
Width
=
"80px"
>
</
asp:TextBox
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"MI"
UniqueName
=
"MemMI"
>
<
ItemTemplate
>
<
asp:TextBox
ID
=
"txtMemMI"
runat
=
"server"
ToolTip
=
"Midlle Initial"
Width
=
"20px"
CssClass
=
"Text"
>
</
asp:TextBox
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"SSN"
UniqueName
=
"MemSSN"
>
<
ItemTemplate
>
<
telerik:RadMaskedTextBox
ID
=
"txtMemSSN"
runat
=
"server"
Mask
=
"###-##-####"
PromptChar
=
"X"
Width
=
"70px"
>
</
telerik:RadMaskedTextBox
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Phone #"
UniqueName
=
"MemPhone"
>
<
ItemTemplate
>
<
telerik:RadMaskedTextBox
ID
=
"txtMemPhone"
runat
=
"server"
Mask
=
"###-###-####"
Width
=
"75px"
>
</
telerik:RadMaskedTextBox
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Email"
UniqueName
=
"MemEmail"
>
<
ItemTemplate
>
<
asp:TextBox
ID
=
"txtMemEmail"
runat
=
"server"
ToolTip
=
"Member Email"
Width
=
"100px"
>
</
asp:TextBox
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Race"
UniqueName
=
"MemRace"
>
<
ItemTemplate
>
<
telerik:RadComboBox
ID
=
"rcbMemRace"
runat
=
"server"
ToolTip
=
"Family Member Race"
Skin
=
"Office2010Black"
Width
=
"100px"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Ethnicity"
UniqueName
=
"MemEthnicity"
>
<
ItemTemplate
>
<
telerik:RadComboBox
ID
=
"rcbMemEthnicity"
runat
=
"server"
Skin
=
"Office2010Black"
ToolTip
=
"Family Member Ethnicity"
Width
=
"100px"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Gender"
UniqueName
=
"MemGender"
>
<
ItemTemplate
>
<
asp:RadioButtonList
ID
=
"rbtnMemGender"
runat
=
"server"
CssClass
=
"radiobutton"
RepeatDirection
=
"Horizontal"
>
<
asp:ListItem
Text
=
"M"
Value
=
"1"
/>
<
asp:ListItem
Text
=
"F"
Value
=
"2"
/>
</
asp:RadioButtonList
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"DOB"
UniqueName
=
"MemDOB"
>
<
ItemTemplate
>
<
telerik:RadDatePicker
ID
=
"rdpMemDOB"
runat
=
"server"
Width
=
"90px"
AutoPostBack
=
"true"
OnSelectedDateChanged
=
"rdpMemDOB_SelectedDateChanged"
>
<
DateInput
ID
=
"DateInput1"
runat
=
"server"
DateFormat
=
"MM/dd/yyyy"
MinDate
=
"01/01/1850"
DisplayDateFormat
=
"MM/dd/yyyy"
>
</
DateInput
>
</
telerik:RadDatePicker
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Age"
UniqueName
=
"MemAge"
>
<
ItemTemplate
>
<
telerik:RadNumericTextBox
ID
=
"txtMemAge"
runat
=
"server"
ToolTip
=
"Family Member Age"
NumberFormat-DecimalDigits
=
"0"
Width
=
"20px"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Education"
UniqueName
=
"MemEducation"
>
<
ItemTemplate
>
<
telerik:RadComboBox
ID
=
"rcbMemEducation"
runat
=
"server"
Skin
=
"Office2010Black"
ToolTip
=
"Family Member Education"
Width
=
"120px"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"First Income/Month"
UniqueName
=
"MemFirstIncome"
>
<
HeaderStyle
Width
=
"60px"
/>
<
ItemTemplate
>
<
telerik:RadNumericTextBox
ID
=
"txtMemFIncome"
runat
=
"server"
ToolTip
=
"Member FirstIncome"
AutoPostBack
=
"true"
OnTextChanged
=
"txtMemFIncome_TextChanged"
Width
=
"60px"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"First IncSrc."
UniqueName
=
"MemFirstIncomeSource"
>
<
ItemTemplate
>
<
asp:TextBox
ID
=
"txtMemFirstIncSrc"
runat
=
"server"
ToolTip
=
"First Income Source"
Width
=
"80px"
>
</
asp:TextBox
>
<
asp:PopupControlExtender
ID
=
"FirstIncSrcPopEx"
runat
=
"server"
TargetControlID
=
"txtMemFirstIncSrc"
PopupControlID
=
"FirstIncSrcPnl"
Position
=
"Left"
/>
<
asp:Panel
ID
=
"FirstIncSrcPnl"
runat
=
"server"
CssClass
=
"PopupModalWindow"
Style
=
"display: none"
>
<
table
>
<
tr
>
<
td
>
<
telerik:RadTextBox
ID
=
"txtFirstIncSrc"
runat
=
"server"
TextMode
=
"MultiLine"
AutoPostBack
=
"true"
OnTextChanged
=
"txtFirstIncSrc_TextChanged"
Width
=
"280px"
>
</
telerik:RadTextBox
>
</
td
>
</
tr
>
</
table
>
</
asp:Panel
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Second Income/Month"
UniqueName
=
"MemSecondIncome"
>
<
HeaderStyle
Width
=
"60px"
/>
<
ItemTemplate
>
<
telerik:RadNumericTextBox
ID
=
"txtMemSIncome"
runat
=
"server"
ToolTip
=
"Member SecondIncome"
AutoPostBack
=
"true"
OnTextChanged
=
"txtMemSIncome_TextChanged"
Width
=
"60px"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Sec IncSrc."
UniqueName
=
"MemSecIncomeSource"
>
<
ItemTemplate
>
<
asp:TextBox
ID
=
"txtMemSecIncSrc"
runat
=
"server"
ToolTip
=
"Second Income Source"
Width
=
"80px"
>
</
asp:TextBox
>
<
asp:PopupControlExtender
ID
=
"SecIncSrcPopEx"
runat
=
"server"
TargetControlID
=
"txtMemSecIncSrc"
PopupControlID
=
"SecIncSrcPanel"
Position
=
"Left"
/>
<
asp:Panel
ID
=
"SecIncSrcPanel"
runat
=
"server"
CssClass
=
"PopupModalWindow"
Style
=
"display: none"
>
<
table
>
<
tr
>
<
td
>
<
telerik:RadTextBox
ID
=
"txtSecIncSrc"
runat
=
"server"
TextMode
=
"MultiLine"
AutoPostBack
=
"true"
OnTextChanged
=
"txtSecIncSrc_TextChanged"
Width
=
"280px"
>
</
telerik:RadTextBox
>
</
td
>
</
tr
>
</
table
>
</
asp:Panel
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Monthly Income"
UniqueName
=
"MemMonthlyIncome"
>
<
HeaderStyle
Width
=
"60px"
/>
<
ItemTemplate
>
<
telerik:RadNumericTextBox
ID
=
"txtMemMIncome"
runat
=
"server"
ToolTip
=
"Member Monthly Income"
Width
=
"60px"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Inc Verification"
UniqueName
=
"MemIncomeVerification"
>
<
ItemTemplate
>
<
asp:TextBox
ID
=
"txtMemIncVerf"
runat
=
"server"
ToolTip
=
"Second Income Source"
Width
=
"80px"
>
</
asp:TextBox
>
<
asp:PopupControlExtender
ID
=
"IncVerfPopEx"
runat
=
"server"
TargetControlID
=
"txtMemIncVerf"
PopupControlID
=
"IncVerfPnl"
Position
=
"Left"
/>
<
asp:Panel
ID
=
"IncVerfPnl"
runat
=
"server"
CssClass
=
"PopupModalWindow"
Style
=
"display: none"
>
<
table
>
<
tr
>
<
td
>
<
telerik:RadTextBox
ID
=
"txtIncVerf"
runat
=
"server"
TextMode
=
"MultiLine"
AutoPostBack
=
"true"
OnTextChanged
=
"txtIncVerf_TextChanged"
Width
=
"280px"
>
</
telerik:RadTextBox
>
</
td
>
</
tr
>
</
table
>
</
asp:Panel
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Health Ins."
UniqueName
=
"MemHealthInsurance"
>
<
ItemTemplate
>
<
asp:CheckBox
ID
=
"chkMemHealthIns"
runat
=
"server"
ToolTip
=
"Health Insurance"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Veteran"
UniqueName
=
"MemVeteran"
>
<
ItemTemplate
>
<
asp:CheckBox
ID
=
"chkMemVeteran"
runat
=
"server"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Disabled"
UniqueName
=
"MemDisabled"
>
<
ItemTemplate
>
<
asp:CheckBox
ID
=
"chkMemDisabled"
runat
=
"server"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridClientDeleteColumn
ConfirmText
=
"Are you sure you want to delete this row?"
HeaderStyle-Width
=
"35px"
ButtonType
=
"ImageButton"
ImageUrl
=
"~/Images/Delete.png"
/>
</
Columns
>
<%-- <
CommandItemTemplate
>
<
asp:Button
ID
=
"AddButton"
runat
=
"server"
Text
=
"Add"
/>
</
CommandItemTemplate
> --%>
<
EditFormSettings
>
<
EditColumn
FilterControlAltText
=
"Filter EditCommandColumn column"
>
</
EditColumn
>
</
EditFormSettings
>
</
MasterTableView
>
<
FilterMenu
EnableImageSprites
=
"False"
>
<
WebServiceSettings
>
<
ODataSettings
InitialContainerName
=
""
>
</
ODataSettings
>
</
WebServiceSettings
>
</
FilterMenu
>
<
ClientSettings
>
<
Scrolling
AllowScroll
=
"true"
/>
</
ClientSettings
>
</
telerik:RadGrid
>
</
ContentTemplate
>
</
asp:UpdatePanel
>
Here is the code behind:
protected
void
btnSaveClient_Click(
object
sender, EventArgs e)
{
BindProperties();
BindAddress();
int
familymemcount = 0;
if
(RadGrid1.Items.Count > 0)
{ familymemcount = RadGrid1.Items.Count; }
int
HouseholdID = 0;
HouseholdID = objBLLClient.SaveClient(objBOClient, familymemcount);
for
(
int
i = 0; i < RadGrid1.Items.Count; i++)
{
BindFamilyMemProperties(i);
if
(i == 0)
{ objBLLClient.SaveFamilyMember(objBOClient, HouseholdID,
true
); }
else
{ objBLLClient.SaveFamilyMember(objBOClient, HouseholdID,
false
); }
}
ClearallFileds();
lblWarning.Text =
"Client Information saved successfully. "
;
mpuWarning.Show();
}
0

Jagat
Top achievements
Rank 1
answered on 02 Feb 2012, 12:30 AM
Any Help....????
0

Richard
Top achievements
Rank 1
answered on 02 Feb 2012, 07:33 PM
Jagat:
Sorry for the delay in responding. I think I have identified a possible reason for the discrepancy in the item count.
I do not see a declarative data source in your markup. How are you binding your data? Are you using a web service? Please be sure to reference the Automatic Data Source Operations documentation. It states:
The automatic data source operations only work when binding the grid to a declarative data source using the DataSourceID property of the grid. You must configure the data source so that it supports the automatic operations.
You will have to perform the delete manually by using the CommandItem method where CommandName = "Delete". See the Command reference (Event bubbling in Telerik RadGrid) documentation for insights.
You will have to perform the delete manually by using the CommandItem method where CommandName = "Delete". See the Command reference (Event bubbling in Telerik RadGrid) documentation for insights.
Hope this helps!
0

Jagat
Top achievements
Rank 1
answered on 03 Feb 2012, 02:55 AM
I don't have any datasource or a web service. I am not bringing in any rows from the database. All i want to do is, just let the user fill in the rows of the grid and save them in the database. All columns in my grid are template columns.
Initially, when the page is loaded, the grid is empty. If the user want to add a row,they can add and enter the details in that grid. And i should save those rows.
So, I don't think i need a datasource in my scenario.
1) Without having that datasource can i use gridbuttoncolumn with command name "delete"?
2)I removed that gridclientdeletecolumn and added the grid button column with commandname "delete". And i added deletecommand event for that button. But how do i delete a row in that event(code behind)?
Thanks
Initially, when the page is loaded, the grid is empty. If the user want to add a row,they can add and enter the details in that grid. And i should save those rows.
So, I don't think i need a datasource in my scenario.
1) Without having that datasource can i use gridbuttoncolumn with command name "delete"?
2)I removed that gridclientdeletecolumn and added the grid button column with commandname "delete". And i added deletecommand event for that button. But how do i delete a row in that event(code behind)?
Thanks
0
Hi Jagat,
RadGrid cannot work in unbound mode - it is designed as a databound control and needs to have a datasource assigned at all times, even if initially it is a few empty records which are then going to be populated.
So, my suggestion is that you try this - at first provide some datasource with the needed number of items and on each postback update the populated rows and if needed, leave the empty ones.
All the best,
Tsvetina
the Telerik team
RadGrid cannot work in unbound mode - it is designed as a databound control and needs to have a datasource assigned at all times, even if initially it is a few empty records which are then going to be populated.
So, my suggestion is that you try this - at first provide some datasource with the needed number of items and on each postback update the populated rows and if needed, leave the empty ones.
All the best,
Tsvetina
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
0

Jagat
Top achievements
Rank 1
answered on 04 Feb 2012, 12:26 AM
Hello Tsvetina,
Sorry, I was not clear in my last comment.
Actually, I have a datasource which i am binding for the radgrid in a button click event.
Please see this,,
ViewState["CurrentTable"] = dtCurrentTable;
RadGrid1.DataSource = dtCurrentTable;
RadGrid1.DataBind();
I am saving the data of the grid in a viewstate and i am binding it again in the button click to hold the data across postbacks.
I dont have a needdatasource event for the grid.
In the page load, i am not displaying the grid. When the user clicks a button, then the first blank row will be added to the grid and then displayed. If the user clicks add button again, another row will be added.
So I am saving the grid info in viewstate(datatable) across postbacks.
So, in this case, would the gridbuttoncolumn with commandname "delete" work to delete a row in the grid?
Thanks
0
Hello Jagat,
Thank you for the clarification. In this case a GridButtonColumn with CommandName="Delete" will fire the ItemCommand event of RadGrid with the same CommandName. However, if you do not handle the event to delete the respective record, visually nothing will happen.
Using AllowAutomaticDeletes="true" is supported only with declarative datasources, as they have the capability of modifying their data. This is pointed out at the beginning of the article on this feature:
http://admin.telerik.com/help/aspnet-ajax/grid-automatic-datasource-operations.html
Greetings,
Tsvetina
the Telerik team
Thank you for the clarification. In this case a GridButtonColumn with CommandName="Delete" will fire the ItemCommand event of RadGrid with the same CommandName. However, if you do not handle the event to delete the respective record, visually nothing will happen.
Using AllowAutomaticDeletes="true" is supported only with declarative datasources, as they have the capability of modifying their data. This is pointed out at the beginning of the article on this feature:
http://admin.telerik.com/help/aspnet-ajax/grid-automatic-datasource-operations.html
Greetings,
Tsvetina
the Telerik team
Sharpen your .NET Ninja skills! Attend Q1 webinar week and get a chance to win a license! Book your seat now >>
0

Jagat
Top achievements
Rank 1
answered on 07 Feb 2012, 12:24 AM
Hello Tsvetina,
I couldn't get that link working properly. Could you please check that?
Another think i would like to mention is, I am handling the deletecommand event in the code behind.
And my questions is,
1) Do i have to delete the row in the datatable and then rebind the modified datatable to the grid or Is there any way to delete the row directly( so that we don't have to rebind the grid again).
Something like... MyGrid.Items[rowindex].Delete?
I searched for something like this, but was unable to find it.
Thanks
I couldn't get that link working properly. Could you please check that?
Another think i would like to mention is, I am handling the deletecommand event in the code behind.
And my questions is,
1) Do i have to delete the row in the datatable and then rebind the modified datatable to the grid or Is there any way to delete the row directly( so that we don't have to rebind the grid again).
Something like... MyGrid.Items[rowindex].Delete?
I searched for something like this, but was unable to find it.
protected
void
RadGrid1_DeleteCommand(
object
sender, GridCommandEventArgs e)
{
int
id = (
int
)e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex][
"Number"
];
//How do i delete here?
}
Thanks
0
Hello Jagat,
Please, excuse me for pasting the wrong link, this is the correct one:
http://www.telerik.com/help/aspnet-ajax/grid-automatic-datasource-operations.html
As for deletion, it needs to be done through the datasource and with rebinding, RadGrid object needs to be in sync with its datasource in order to work properly. It is not supported to remove objects from the control instead of removing data from the datasource.
Greetings,
Tsvetina
the Telerik team
Please, excuse me for pasting the wrong link, this is the correct one:
http://www.telerik.com/help/aspnet-ajax/grid-automatic-datasource-operations.html
As for deletion, it needs to be done through the datasource and with rebinding, RadGrid object needs to be in sync with its datasource in order to work properly. It is not supported to remove objects from the control instead of removing data from the datasource.
Greetings,
Tsvetina
the Telerik team
Sharpen your .NET Ninja skills! Attend Q1 webinar week and get a chance to win a license! Book your seat now >>