How to delete a row from DevExpress Grid - datasource

I bind my DevExpress XtraGrid to a SQL Server database. I use the default navigator to delete rows. I would like the database to reflect these deletions as well. How do I do this?
Erik

You should enable the ASPxGridView GridViewCommandColumn.
Here's an example using the Object Datasource but the concept is the same for any type.
<dxwgv:GridViewCommandColumn ShowSelectCheckbox="False" VisibleIndex="0" Caption="Projects">
<DeleteButton Visible="True">
</DeleteButton>
<ClearFilterButton Visible="True"></ClearFilterButton>
</dxwgv:GridViewCommandColumn>
And have the aproppiate Datasource:
<asp:ObjectDataSource ID="MyDS" runat="server"
DeleteMethod="Delete"
TypeName="Model.DataRepository">
<DeleteParameters>
<asp:Parameter Name="ID" Type="Int64" />
</DeleteParameters>
</asp:ObjectDataSource>

Related

Multi-parameter SqlDatasource search not returning any records

I have an odd problem. I have a gridview attached to a sqldatasource that I send three possible parameters to. The search works fine if I search the item number but if I search for the first name or last name without the item number it does not return anything. The SQL works fine when I test it in SQL management studio but does not when I test it in visual studio in the search form.
Any assistance in solving this will be appreciated. Thanks for your time.
<table style="width: 100%;">
<tr>
<td>Caller Search</td>
<td>
<asp:Label ID="ITEMsearchlable" runat="server" Text="ITEM#"></asp:Label><br />
<asp:TextBox ID="ITEM_NUMsearch" runat="server"></asp:TextBox></td>
<td>
<asp:Label ID="ofname_label" runat="server" Text="First name"></asp:Label><br />
<asp:TextBox ID="search_fname" runat="server" CssClass="uppercase"></asp:TextBox></td>
<td><asp:Label ID="olname_label" runat="server" Text="Last name"></asp:Label><br />
<asp:TextBox ID="search_lname" runat="server" CssClass="uppercase"></asp:TextBox></td>
<td>
<asp:Button ID="search_btn" runat="server" Text="Offender Caller" /></td>
</tr>
</table>
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False" AllowPaging="True" AllowSorting="True" Width="771px" EmptyDataText="No record found">
<Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="ITEM_NUM" HeaderText="ITEM_NUM" SortExpression="ITEM_NUM" />
<asp:BoundField DataField="NAME_FIRST" HeaderText="NAME_FIRST" SortExpression="NAME_FIRST" />
<asp:BoundField DataField="NAME_LAST" HeaderText="NAME_LAST" SortExpression="NAME_LAST" />
<asp:BoundField DataField="CALLER_ID" HeaderText="CALLER_ID" SortExpression="CALLER_ID" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:testdbConnectionString %>"
SelectCommand="SELECT DISTINCT
ORDERS.ITEM_NUM,
ORDERS.NAME_FIRST,
ORDERS.NAME_LAST,
VICTIM_CALL_LOG.CALLER_ID
FROM ORDERS LEFT OUTER JOIN
VICTIM_CALL_LOG ON ORDERS.ITEM_NUM = VICTIM_CALL_LOG.ITEM_NUM WHERE ((ORDERS.ITEM_NUM = #ITEM_NUM)
OR (ORDERS.NAME_FIRST LIKE '%' + #NAME_FIRST + '%') OR (ORDERS.NAME_LAST LIKE '%' + #NAME_LAST + '%'))">
<SelectParameters>
<asp:ControlParameter ControlID="ITEM_NUMsearch" Name="ITEM_NUM" PropertyName="Text" Type="Int32" />
<asp:ControlParameter ControlID="search_fname" DefaultValue="NULL" Name="NAME_FIRST" PropertyName="Text" Type="String" />
<asp:ControlParameter ControlID="search_lname" DefaultValue="NULL" Name="NAME_LAST" PropertyName="Text" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
You need to give the numeric parameter a default value too:
<asp:ControlParameter ControlID="ITEM_NUMsearch" DefaultValue="-1" Name="ITEM_NUM" PropertyName="Text" Type="Int32" />
I used "-1" because I guessed it would never be an actual value in the database, so that needs to be checked.
Note that having a DefaultValue of "NULL" in the string parameters is actually the string "NULL", not the database version of NULL. To do that properly, I suspect that you would have to use code-behind instead of <asp> controls. In the meantime, a default value of "12345" could be a better choice, just in case someone has a name with "null" in it - Null is an actual last name for some people: How does a surname of Null cause problems in many databases?

How i fill combobox items in Radgridview manually using in vb.net

How I fill combobox items in Radgridview manually without using datasource in vb.net I have a Radgridview in my form.(radgridview1) radgridview1 contained 3 Column and column number 3 is combobox type. I want to fill each combobox in column 3 with this data using code: UNP IPE Angle BOX Other Profile. I don't know how to do it.
You can use GridTemplateColumn like the following.
<telerik:GridTemplateColumn ItemStyle-Wrap="true" ItemStyle-VerticalAlign="Middle"
ItemStyle-HorizontalAlign="center" AllowFiltering="false" HeaderStyle-HorizontalAlign="Center"
HeaderStyle-Width="3%" ItemStyle-Width="3%" HeaderText="Profile">
<ItemTemplate>
<telerik:RadComboBox>
<Items>
<telerik:RadComboBoxItem Text="UNP" Value="UNP" />
<telerik:RadComboBoxItem Text="IPE" Value="IPE" />
<telerik:RadComboBoxItem Text="ANGLE" Value="ANGLE" />
<telerik:RadComboBoxItem Text="BOX" Value="BOX" />
<telerik:RadComboBoxItem Text="Other Profile" Value="OTHER" />
</Items>
</telerik:RadComboBox>
</ItemTemplate>
</telerik:GridTemplateColumn>
or else you can bind each comboBox in _ItemDataBound

very strange issue; different results from same table

I am binding a gridview with some column from a database table, but it shows different results in Pane and in Gridview. see the attachted images.
see the marked records why they are different, although they are comming from the same table.
But yes for binding gridview I am using this query
SELECT mtblbuilding_budget_data.building_id,
mtblbuilding_budget_data.building_name,
mtblbuilding_budget_data.sanctioned_dpr,
mtblbuilding_budget_data.sanctioned_contract,
mtblblock.block_name
FROM mtblbuilding_budget_data
LEFT JOIN mtblblock
ON mtblblock.block_id = mtblbuilding_budget_data.block_id
WHERE mtblbuilding_budget_data.sfti_id = #SFTI_Id
AND mtblbuilding_budget_data.spmu_id = #SPMU_Id
ORDER BY mtblbuilding_budget_data.block_id
aspx code
<asp:TemplateField HeaderText="Sanction (DPR)">
<ItemTemplate>
<%#GetQTY1(float.Parse(Eval("Sanctioned_DPR").ToString())).ToString("N2")%>
</ItemTemplate>
<FooterTemplate>
<%#GetTotalQTY1().ToString("N2")%>
</FooterTemplate>
<FooterStyle HorizontalAlign="Right" />
<HeaderStyle HorizontalAlign="Right" />
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Sanction (Contract)">
<ItemTemplate>
<%#GetQTY2(float.Parse(Eval("Sanctioned_Contract").ToString())).ToString("N2")%>
</ItemTemplate>
<FooterTemplate>
<%#GetTotalQTY2().ToString("N2")%>
</FooterTemplate>
<FooterStyle HorizontalAlign="Right" />
<HeaderStyle HorizontalAlign="Right" />
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</asp:TemplateField>
Your grigview is rounding the values, check the next column on the same lines, it also as different results.
check the properties of your gridview e disable the round option.
check the properties of your gridview e disable the round option. That's the solution..

update rad ajax manager from codebehind

Hi can someone help me how to call (or refresh) below control from code behind?
Currently it is working when I click my btnUpdate button. Along with I want to refresh the same usercontrol when I press another button also (ex: btnrefresh).
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="btnUpdate">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="Panel1" LoadingPanelID="RadAjaxLoadingPanel1" />
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>
<ClientEvents OnRequestStart="RequestStart" OnResponseEnd="ResponseEnd" />
</telerik:RadAjaxManager>
<telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="Default" />
<asp:Panel ID="Panel1" runat="server" Width="100%">
<uc:EmpEnrollment runat="server" ID="EmpEnrollment" />
</asp:Panel>
Just add another AjaxSetting for your btnrefresh in your AjaxSettings like below:
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="btnUpdate">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="Panel1" LoadingPanelID="RadAjaxLoadingPanel1" />
</UpdatedControls>
</telerik:AjaxSetting>
<telerik:AjaxSetting AjaxControlID="btnrefresh">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="Panel1" LoadingPanelID="RadAjaxLoadingPanel1" />
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>

vb.net datatype in manually added column

Dim pctofpax As New DataColumn
pctofpax = New DataColumn("PCTPAX1", GetType(Decimal))
pctofpax.Expression = "[ASOFPAX] / [YEPAX]"
ds.Tables("workplease").Columns.Add(pctofpax)
Dim avgppax As New DataColumn
avgppax = New DataColumn("AVG PAX", GetType(Double))
avgppax.Expression = "[Current Sales] / [Current PAX]"
ds.Tables("workplease").Columns.Add(avgppax)
These are two columns that i added into my asp.net/vb.net datagrid. the problem is i keep trying to change the datatypes so they show up as numbers with only two decimals but it is not working
<span lang="en-us">Sales As Of Analysis</span><br />
<asp:GridView ID="GridView1" runat="server" BackColor="White"
BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3"
GridLines="Vertical">
<RowStyle BackColor="#EEEEEE" ForeColor="Black" />
<FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="#DCDCDC" />
</asp:GridView>
<asp:BoundColumn DataField="PCTPAX1"
HeaderText="PCTPAX1"
DataFormatString="{0:c}">
</div>
</form>
</body>
</html>
and nothing happend to my data
If it's just a matter of displaying only two decimals, this can be accomplished in the display code for the DataGrid:
<asp:BoundField DataField="PCTPAX1"
HeaderText="PCTPAX1"
DataFormatString="{0:c}">
Note the DataFormatString value of {0:c} which specifies that the formatting of the value in that field should be "currency." (You can also try with a capital C, I don't have a test handy for it right now.) There's a lot more you can do with format strings, more information here.
Or do you want the actual values to be rounded to currency values? You'll likely use Math.Round for that, though I don't have an example handy. There's information about that here.
Edit: Based on your comment(s), it sounds like you were attempting to change data types at the database level. This won't really impact the code. The value coming back from the database in the form of a double or decimal or some other numeric likely won't carry that precision back to the code. As far as the DataGrid is concerned, it's calling .ToString() on a double and showing the result. No database data type is involved. Using the DataFormatString property to pass a format string to the .ToString() method is how to change the display.
Edit again based on your question edit: Your HTML is broken. You have the BoundColumn outside of the grid, and the column tag itself isn't closed. Columns go inside the grid. See the grid layout here. Basically, you'd want something more like:
<asp:GridView ID="GridView1" runat="server" BackColor="White"
BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3"
GridLines="Vertical">
<RowStyle BackColor="#EEEEEE" ForeColor="Black" />
<FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="#DCDCDC" />
<Columns>
<asp:BoundField DataField="PCTPAX1"
HeaderText="PCTPAX1"
DataFormatString="{0:c}">
</asp:BoundField>
</Columns>
</asp:GridView>
Changing the type of a column which is already in your datatable doesn't work. or at least not that i know. if you just want to get a different formatting, look at the answers above.