|
Thank's for your answer.
I don't understand how the trick should work.
I modified the select query in this way:
"SELECT * FROM [t_plro_PriceListRoundings] WHERE [plro_ListName]=isnull(@ListName, [plro_ListName])"
ListName = Request.Form("hdd_Where")
ConvertEmptyStringToNull = True;
DefaultValue = null (I've tried leaving this propriety blank)
Direction = input
FormField = hdd_Where
Name = ListName
Size = 0
Type = String
When I load the page the gridview isn't there .If I open the page in html mode , the Gridview doesn't exist.
Could you tell me what I did wrong?
Thank you
Francy
|
|
|
|
|
Could you post your code snippets ? I believe that you can use the FilterExpression with the SqlDataSource control and the update command can execute properly.
|
|
|
|
|
Sorry but what code snipplets are you talking about?
I didn't write any code, I only modified the sqlDataSource proprieties:
Select query: "SELECT * FROM [t_plro_PriceListRoundings]"
Delete query: "DELETE FROM [t_plro_PriceListRoundings] WHERE [plro_ID] = @original_plro_ID"
Update query: "UPDATE [t_plro_PriceListRoundings] SET [plro_PriceMinValue] = @plro_PriceMinValue, [plro_PriceMaxValue] = @plro_PriceMaxValue, [plro_RoundingValue] = @plro_RoundingValue, [plro_ListName] = @plro_ListName, [plro_FixedAmmount] = @plro_FixedAmmount WHERE [plro_ID] = @original_plro_ID"
Filter expression: "{0}"
Filter parameters: "{newpar,Request.Form("hdd_where")}"
where hdd_where.value (hidden html input) can be "WHERE plro_ListName=\"Test\"" or something like it
I also specify on the GridView the propriety DataKeysNames = "plro_ID"
That's All
Thank's for you help
Francy
|
|
|
|
|
I would like to see the markup (definition) of the SqlDataSource control in the web page if you don't mind.
|
|
|
|
|
I hope this is what you asked:
<asp:SqlDataSource ID="MySqlDataSource" runat="server" ConflictDetection="CompareAllValues"
DeleteCommand="DELETE FROM [t_plro_PriceListRoundings] WHERE [plro_ID] = @original_plro_ID"
InsertCommand="INSERT INTO [t_plro_PriceListRoundings] ([plro_PriceMinValue], [plro_PriceMaxValue], [plro_RoundingValue], [plro_ListName], [plro_FixedAmmount]) VALUES (@plro_PriceMinValue,@plro_PriceMaxValue, @plro_RoundingValue, @plro_ListName, @plro_FixedAmmount)"
OldValuesParameterFormatString="original_{0}" ProviderName="System.Data.SqlClient"
SelectCommand="SELECT * FROM [t_plro_PriceListRoundings]"
UpdateCommand="UPDATE [t_plro_PriceListRoundings] SET [plro_PriceMinValue] = @plro_PriceMinValue, [plro_PriceMaxValue] = @plro_PriceMaxValue, [plro_RoundingValue] = @plro_RoundingValue, [plro_ListName] = @plro_ListName, [plro_FixedAmmount] = @plro_FixedAmmount WHERE [plro_ID] = @original_plro_ID"
EnableCaching="True"
OnSelecting="MySqlDataSource_Selecting"
OnUpdating="MySqlDataSource_Updating" FilterExpression="{0}">
<DeleteParameters>
<asp:Parameter Name="original_plro_ID" Type="Int32" DefaultValue="" />
<asp:Parameter Name="original_plro_PriceMinValue" Type="Decimal" />
<asp:Parameter Name="original_plro_PriceMaxValue" Type="Decimal" />
<asp:Parameter Name="original_plro_RoundingValue" Type="Decimal" />
<asp:Parameter Name="original_plro_ListName" Type="String" />
<asp:Parameter Name="original_plro_FixedAmmount" Type="Decimal" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="plro_PriceMinValue" Type="Decimal" />
<asp:Parameter Name="plro_PriceMaxValue" Type="Decimal" />
<asp:Parameter Name="plro_RoundingValue" Type="Decimal" />
<asp:Parameter Name="plro_ListName" Type="String" />
<asp:Parameter Name="plro_FixedAmmount" Type="Decimal" />
<asp:Parameter Name="original_plro_ID" Type="Int32" />
<asp:Parameter Name="original_plro_PriceMinValue" Type="Decimal" />
<asp:Parameter Name="original_plro_PriceMaxValue" Type="Decimal" />
<asp:Parameter Name="original_plro_RoundingValue" Type="Decimal" />
<asp:Parameter Name="original_plro_ListName" Type="String" />
<asp:Parameter Name="original_plro_FixedAmmount" Type="Decimal" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="plro_PriceMinValue" Type="Decimal" />
<asp:Parameter Name="plro_PriceMaxValue" Type="Decimal" />
<asp:Parameter Name="plro_RoundingValue" Type="Decimal" />
<asp:Parameter Name="plro_ListName" Type="String" />
<asp:Parameter Name="plro_FixedAmmount" Type="Decimal" />
</InsertParameters>
<FilterParameters>
<asp:FormParameter FormField="hdd_Where" Name="test" />
</FilterParameters>
</asp:SqlDataSource>
I don't use any event , if you see any of them it was just for testing.
ex:
hdd_Where.value = "WHERE plro_ListName = \"Test\""
Thank you
Francy
|
|
|
|
|
That's what I would like to see and it's clear enough except a couple of redundant update/delete parameters. However, one thing that strikes me most is the value of the hidden element:
"<code>WHERE</code> plro_ListName = \"Test\"" .
Are you sure that you have the keyword WHERE in the filter expression?
|
|
|
|
|
No , sorry my mistake. In the hidden element I only have plro_ListName =\"Test\"
|
|
|
|
|
Unfortunately, I still cannot figure out the cause in your sample code, perhapse the rest of the web page may help. Anyway, below is a quick example I have created with the Northwind DB:
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title runat="server" id="title1">Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="CategoryID"
DataSourceID="SqlDataSource1">
<Columns>
<asp:CommandField HeaderText="Action" ShowEditButton="True" ShowDeleteButton="True" />
<asp:BoundField DataField="CategoryID" HeaderText="CategoryID" InsertVisible="False"
ReadOnly="True" SortExpression="CategoryID" />
<asp:BoundField DataField="CategoryName" HeaderText="CategoryName" SortExpression="CategoryName" />
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
</Columns>
</asp:GridView>
<br />
<asp:HiddenField ID="hdd_Where" runat="server" Value="CategoryName ='Test'" />
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
DeleteCommand="DELETE FROM [Categories] WHERE [CategoryID] = @original_CategoryID"
InsertCommand="INSERT INTO [Categories] ([CategoryName], [Description]) VALUES (@CategoryName, @Description)"
SelectCommand="SELECT [CategoryID], [CategoryName], [Description] FROM [Categories]"
UpdateCommand="UPDATE [Categories] SET [CategoryName] = @CategoryName, [Description] = @Description WHERE [CategoryID] = @original_CategoryID "
EnableCaching="True"
FilterExpression="{0}"
ConflictDetection="CompareAllValues"
OldValuesParameterFormatString="original_{0}"
ProviderName="System.Data.SqlClient">
<DeleteParameters>
<asp:Parameter Name="original_CategoryID" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="CategoryName" Type="String" />
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="original_CategoryID" Type="Int32" />
<asp:Parameter Name="original_CategoryName" Type="String" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="CategoryName" Type="String" />
<asp:Parameter Name="Description" Type="String" />
</InsertParameters>
<FilterParameters>
<asp:FormParameter FormField="hdd_Where" Name="test" />
</FilterParameters>
</asp:SqlDataSource>
<asp:Button runat="server" ID="btnFilter" Text="Filter" />
<br />
<br />
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataKeyNames="CategoryID"
DataSourceID="SqlDataSource1" DefaultMode="Insert" Height="50px" Width="125px">
<Fields>
<asp:BoundField DataField="CategoryID" HeaderText="CategoryID" InsertVisible="False"
ReadOnly="True" SortExpression="CategoryID" />
<asp:BoundField DataField="CategoryName" HeaderText="CategoryName" SortExpression="CategoryName" />
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
<asp:CommandField ShowInsertButton="True" />
</Fields>
</asp:DetailsView>
<br />
</div>
</form>
</body>
</html>
The DetailsView control is only used to insert new records.
|
|
|
|
|
I tried your example but when updating,deleting,and inserting I recive the following error message:
The index "PK_Categories" for table "dbo.Categories" (RowsetId 72057594038517760) resides on a read-only filegroup, which cannot be modified.
Do you know what does it mean?
|
|
|
|
|
Fr235166 wrote: The index "PK_Categories" for table "dbo.Categories" (RowsetId 72057594038517760) resides on a read-only filegroup, which cannot be modified.
Read-Only FileGroups[^]
Make sure it's not read-only.
|
|
|
|
|
Thank you, I managed to resolve the sql error.
I can't find any differences between the example you wrote and my page , but when I create the same page from scratches it works.
Thank you again
Francy
|
|
|
|
|
Glad to hear it's working. Forza Italia in World Cup ! Ciao.
|
|
|
|
|
Hi.
I have a little problem. I have a data extracted from database, which I need to load into the DataGrid but I have to do it dynamically. I tried to do that but failed.
Does anyone have an experience with doing so and can help me out? Here's the peice of my code.
Thanks a lot for help.
' Get DataBase data
rdrItm = cmd.ExecuteReader()
'Generate DataGrid
Dim dg As New DataGrid
dg.ID = "dg" & newOrd.GetOrdId 'newOrd.GetOrdId is an Order # I get from class
dg.DataSource = rdrItm
dg.AutoGenerateColumns = False
Dim col1 As New TemplateColumn
col1.HeaderText = "SKU"
Dim lbl As New Label
lbl.ID = "lbl_sku"
' Here's where I'm stuck. I can see header but....
' I need to add this label as TemplateColumn
' with a proper data. Plus I will have TextBoxes as well later on.
dg.Columns.Add(col1)
|
|
|
|
|
I suggest adding the column in design view and make it visible or invisible when you need it. Adding a template column dynamically seems like to much effort.
how vital enterprise application are for proactive organizations leveraging collective synergy to think outside the box and formulate their key objectives into a win-win game plan with a quality-driven approach that focuses on empowering key players to drive-up their core competencies and increase expectations with an all-around initiative to drive up the bottom-line. But of course, that's all a "high level" overview of things
--thedailywtf 3/21/06
|
|
|
|
|
Cannot do in design time. The reason is that I don't know how many DataGrids I need.
The number of DataGrids depends on how many orders the customer selects to process in previous page. If the # is 2 I need 2 Grids, if 1 I need 1 Grid and so on...
I actually figured out how to do them dynamically but there are other issues that I cannot solve.
By making DataGrids generated dynamically I had to create a calss file that goes all the work with loading but that class cannot have any calculations on columns (don't ask me why). I've tried different things and to no success. For example I have quantity field and weights field so I was able to create totalweigth field for each item. But when I try to store total weight variable in grand total weight variable (all itmes togheter) it doesn't work. Haaaaaaaaaaaaa.
|
|
|
|
|
|
. It's funny. I used the same article to create my class file.
Thanks,
|
|
|
|
|
You either add the label, textboxes in the your custom template definition like you see in the article or create an event handler for the ItemCreated event of the dynamic datagrid, you then add the label . textboxes to each datagrid item at the template column.
|
|
|
|
|
Done that. Works fine. The only problem I have is, like I've mentioned before, is to store totals of all orders. For example, when I do ItemCreated even handler I'm able to calculate total for specific item and store it in Label or TextBox. But I cannot calculate total for all items. In my event handler every time I calculate item total I've tried to add it to grandtotal global varailbe that I've put at the top of my class (global variable) but for some reason it doen't work. I'm not sure why!!!
Public Class DataGridTemplate
Implements ITemplate
Dim templateType As ListItemType
Dim columnName1 As String
Dim columnName2 As String
Dim mode As Integer
Dim grandtotalweight As Decimal
Sub New(ByVal type As ListItemType, ByVal ColName1 As String, ByVal ColName2 As String, ByVal md As Integer)
templateType = type
columnName1 = ColName1
columnName2 = ColName2
mode = md
grandtotalweight = 0
End Sub
Sub InstantiateIn(ByVal container As Control) _
Implements ITemplate.InstantiateIn
Dim lb As New Label
Dim tb As New TextBox
Select Case templateType
Case ListItemType.Header
lb.Text = "" & columnName1 & ""
container.Controls.Add(lb)
Case ListItemType.Item
AddHandler lb.DataBinding, AddressOf BindDataWeights
container.Controls.Add(lb)
Case ListItemType.EditItem
tb.Text = ""
container.Controls.Add(tb)
Case ListItemType.Footer
lb.Text = "Footer"
container.Controls.Add(lb)
End Select
End Sub
Sub BindDataWeights(ByVal Sender As Object, ByVal e As EventArgs)
Dim lb As Label = CType(Sender, Label)
Dim Container As DataGridItem = CType(lb.NamingContainer, DataGridItem)
Dim qty As Integer = DataBinder.Eval(Container.DataItem, columnName1)
Dim sku As String = DataBinder.Eval(Container.DataItem, columnName2)
Dim total As Decimal = GetWeights(qty, sku)
lb.Text = Format(total, "0.00")
End Sub
Function GetWeights(ByVal qty As Integer, ByVal sku As String) As Decimal
Dim con As System.Data.SqlClient.SqlConnection
Dim rdr As System.Data.SqlClient.SqlDataReader
Dim weight As Decimal = 0
Try
con = New System.Data.SqlClient.SqlConnection
con.ConnectionString = "connection string goes here"
con.Open()
Dim cmd As New System.Data.SqlClient.SqlCommand("SELECT * FROM Weights WHERE itm_sku=@i_sku", con)
cmd.Parameters.Add("@i_sku", sku)
rdr = cmd.ExecuteReader()
Do While rdr.Read()
weight = rdr("itm_wght")
Loop
rdr.Close()
con.Close()
Catch ex As Exception
con.Close()
'Display error message
End Try
' This is where I try to sotre total weights in the grandtotalweight variable
' But when I access it later on it returns 0
grandtotalweight += weight * qty
Return weight * qty
End Function
End Class
-- modified at 9:02 Friday 16th June, 2006
|
|
|
|
|
How do you get the grandtotalweight later on? Do you want to display this value in the footer of the dynamic column? Then how do you create the templates for the dynamic column? Are you sure that the template instance of the footer is the same as one of the item? IMO, you are using difference objects so the grandtotalweight gives you 0.
|
|
|
|
|
You are right. I do instantiate objects for each column. That's why I thought that my code should work. Cloumn 5 is where I calculate the weights so I'm using the dgtemp object (Please see code below).
Thanks,
' Bind data to DataGrid
Dim dg As New DataGrid
dg.ID = "dg" & 1
dg.AutoGenerateColumns = False
' Cloumn 1
Dim tc1 As New TemplateColumn
tc1.HeaderTemplate = New DataGridTemplate(ListItemType.Header, "SKU", "", 0)
tc1.ItemTemplate = New DataGridTemplate(ListItemType.Item, "itm_sku", "", 1)
dg.Columns.Add(tc1)
' Cloumn 2
Dim tc2 As New TemplateColumn
tc2.HeaderTemplate = New DataGridTemplate(ListItemType.Header, "DESCRIPTION", "", 0)
tc2.ItemTemplate = New DataGridTemplate(ListItemType.Item, "itm_desc", "", 2)
dg.Columns.Add(tc2)
' Cloumn 3
Dim tc3 As New TemplateColumn
tc3.HeaderTemplate = New DataGridTemplate(ListItemType.Header, "QTY TO SHIP", "", 0)
tc3.ItemTemplate = New DataGridTemplate(ListItemType.Item, "itm_qty", "", 3)
dg.Columns.Add(tc3)
' Cloumn 4
Dim tc4 As New TemplateColumn
tc4.HeaderTemplate = New DataGridTemplate(ListItemType.Header, "QTY ORDERED", "", 0)
tc4.ItemTemplate = New DataGridTemplate(ListItemType.Item, "itm_qty", "", 4)
dg.Columns.Add(tc4)
' Cloumn 5
Dim tc5 As New TemplateColumn
tc5.HeaderTemplate = New DataGridTemplate(ListItemType.Header, "WEIGHTS (lbs)", "", 0)
Dim dgtemp As New DataGridTemplate(ListItemType.Item, "itm_qty", "itm_sku", 5)
tc5.ItemTemplate = dgtemp
dg.Columns.Add(tc5)
' Try to get grand total
txt_total_weight.Text = dgtemp.GetTotalWeight()
' Bind Reader (data from DB) to DataGrid
dg.DataSource = rdrItm
dg.DataBind()
|
|
|
|
|
Because you are using the DataBinding event to populate the grandtotalweight, so if you access this variable before the DataBind method is called (before the DataBinding event gets fired), the result is clearly 0. The quick fix is to move it after the DataBind method call:
'Try to get grand total
'txt_total_weight.Text = dgtemp.GetTotalWeight()
' Bind Reader (data from DB) to DataGrid
dg.DataSource = rdrItm
dg.DataBind()
'Try to get grand total
txt_total_weight.Text = dgtemp.GetTotalWeight()
|
|
|
|
|
Man...... Thank you very much.
Sometimes it takes a fresh eye to see these kind of 'stupid' mistakes.
Thanks.
|
|
|
|
|
I have three div elements: (divleft,divcenter,divright) in my page. There are links in the divleft created through ASP:HyperLink control. When any link is clicked i want to display the refered throug NavigateURL in the divcenter. What should i do for that?
Thanks
|
|
|
|
|
Try using an IFrame inside the div center and set the src property of the iframe.
how vital enterprise application are for proactive organizations leveraging collective synergy to think outside the box and formulate their key objectives into a win-win game plan with a quality-driven approach that focuses on empowering key players to drive-up their core competencies and increase expectations with an all-around initiative to drive up the bottom-line. But of course, that's all a "high level" overview of things
--thedailywtf 3/21/06
|
|
|
|
|