arnyinc
01-18-2007, 07:29 PM
I have a GridView that I want to filter and be sortable. The problem is when I set the filterexpression for my datasource I have to do a databind. After I do that, I can no longer do an inline update of the GridView.
Here's my codebehind:
Protected Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack Then
setSelectCommand()
End If
End Sub
Protected Sub setSelectCommand()
Dim MyFilter As String
MyFilter = "1=1"
If StatusFilter.SelectedValue <> "" Then
MyFilter += " and vsid = '" & StatusFilter.SelectedValue & "'"
End If
If VnumberFilter.Text <> "" Then
MyFilter += " and vnumber LIKE '%" & VnumberFilter.Text & "%'"
End If
If DepartmentFilter.SelectedValue <> "" Then
MyFilter += " and dpid='" & DepartmentFilter.SelectedValue & "'"
End If
If UnitFilter.SelectedValue <> "" Then
MyFilter += " and uid='" & UnitFilter.SelectedValue & "'"
End If
SqlDataSource1.FilterExpression = MyFilter
GridView1.DataBind() 'Commenting out this line lets me update, but then I can't filter.
End Sub
Here's the gridview:
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource1" EnableTheming="True" ForeColor="#333333" GridLines="None" PageSize="20" Width="752px" AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" DataKeyNames="id" OnRowUpdating="GridView1_RowUpdating" DataMember="DefaultView">
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:BoundField DataField="vnumber" HeaderText="Vehicle Number" SortExpression="vnumber" />
<asp:BoundField DataField="id" HeaderText="id" SortExpression="id" Visible="False" />
<asp:TemplateField HeaderText="Status" SortExpression="vehiclestatus">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" DataTextField="vehiclestatus" DataValueField="id" SelectedValue='<%# Bind("vsid") %>' AppendDataBoundItems="True">
<asp:ListItem Selected="True"></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:VehicleDashboard.My.MySettings.vehicledashboardCS %>"
SelectCommand="SELECT [id], [vehiclestatus] FROM [vehiclestatus] ORDER BY [vehiclestatus]">
</asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("vehiclestatus") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Department" SortExpression="department">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource3"
DataTextField="department" DataValueField="id" SelectedValue='<%# Bind("dpid") %>' AppendDataBoundItems="True">
<asp:ListItem Selected="True"></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:VehicleDashboard.My.MySettings.vehicledashboardCS %>"
SelectCommand="SELECT [id], [department] FROM [department] ORDER BY [department]">
</asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("department") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Unit" SortExpression="unit">
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("unit") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="SqlDataSource4" DataTextField="unit" DataValueField="id" SelectedValue='<%# Bind("uid") %>' AppendDataBoundItems="True">
<asp:ListItem Selected="True"></asp:ListItem>
</asp:DropDownList><asp:SqlDataSource ID="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:VehicleDashboard.My.MySettings.vehicledashboardCS %>"
SelectCommand="SELECT [id], [unit] FROM [unit] ORDER BY [unit]"></asp:SqlDataSource>
</EditItemTemplate>
</asp:TemplateField>
<asp:HyperLinkField DataNavigateUrlFields="id,vnumber" DataNavigateUrlFormatString="detail.aspx?id={0}&vnumber={1}" InsertVisible="False" Text="View Defect Log" />
</Columns>
<RowStyle BackColor="#EFF3FB" />
<EditRowStyle BackColor="#2461BF" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:VehicleDashboard.My.MySettings.vehicledashboardCS %>"
SelectCommand="exec sp_SelectVehicle"
DeleteCommand="exec sp_DeleteVehicle @original_id"
UpdateCommand="exec sp_UpdateVehicle @original_id, @dept_id, @vehiclestatus_id, @unit_id, @vnumber"
InsertCommand="exec sp_InsertVehicle @dept_id, @vehiclestatus_id, @unit_id, @vnumber"
OldValuesParameterFormatString="original_{0}"
>
<UpdateParameters>
<asp:Parameter Name="id" Type="Int32" />
<asp:Parameter Name="vnumber" Type="String" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name="vid" Type="Int32" />
</DeleteParameters>
</asp:SqlDataSource>
Here's my codebehind:
Protected Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack Then
setSelectCommand()
End If
End Sub
Protected Sub setSelectCommand()
Dim MyFilter As String
MyFilter = "1=1"
If StatusFilter.SelectedValue <> "" Then
MyFilter += " and vsid = '" & StatusFilter.SelectedValue & "'"
End If
If VnumberFilter.Text <> "" Then
MyFilter += " and vnumber LIKE '%" & VnumberFilter.Text & "%'"
End If
If DepartmentFilter.SelectedValue <> "" Then
MyFilter += " and dpid='" & DepartmentFilter.SelectedValue & "'"
End If
If UnitFilter.SelectedValue <> "" Then
MyFilter += " and uid='" & UnitFilter.SelectedValue & "'"
End If
SqlDataSource1.FilterExpression = MyFilter
GridView1.DataBind() 'Commenting out this line lets me update, but then I can't filter.
End Sub
Here's the gridview:
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource1" EnableTheming="True" ForeColor="#333333" GridLines="None" PageSize="20" Width="752px" AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" DataKeyNames="id" OnRowUpdating="GridView1_RowUpdating" DataMember="DefaultView">
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:BoundField DataField="vnumber" HeaderText="Vehicle Number" SortExpression="vnumber" />
<asp:BoundField DataField="id" HeaderText="id" SortExpression="id" Visible="False" />
<asp:TemplateField HeaderText="Status" SortExpression="vehiclestatus">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" DataTextField="vehiclestatus" DataValueField="id" SelectedValue='<%# Bind("vsid") %>' AppendDataBoundItems="True">
<asp:ListItem Selected="True"></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:VehicleDashboard.My.MySettings.vehicledashboardCS %>"
SelectCommand="SELECT [id], [vehiclestatus] FROM [vehiclestatus] ORDER BY [vehiclestatus]">
</asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("vehiclestatus") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Department" SortExpression="department">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource3"
DataTextField="department" DataValueField="id" SelectedValue='<%# Bind("dpid") %>' AppendDataBoundItems="True">
<asp:ListItem Selected="True"></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:VehicleDashboard.My.MySettings.vehicledashboardCS %>"
SelectCommand="SELECT [id], [department] FROM [department] ORDER BY [department]">
</asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("department") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Unit" SortExpression="unit">
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("unit") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="SqlDataSource4" DataTextField="unit" DataValueField="id" SelectedValue='<%# Bind("uid") %>' AppendDataBoundItems="True">
<asp:ListItem Selected="True"></asp:ListItem>
</asp:DropDownList><asp:SqlDataSource ID="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:VehicleDashboard.My.MySettings.vehicledashboardCS %>"
SelectCommand="SELECT [id], [unit] FROM [unit] ORDER BY [unit]"></asp:SqlDataSource>
</EditItemTemplate>
</asp:TemplateField>
<asp:HyperLinkField DataNavigateUrlFields="id,vnumber" DataNavigateUrlFormatString="detail.aspx?id={0}&vnumber={1}" InsertVisible="False" Text="View Defect Log" />
</Columns>
<RowStyle BackColor="#EFF3FB" />
<EditRowStyle BackColor="#2461BF" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:VehicleDashboard.My.MySettings.vehicledashboardCS %>"
SelectCommand="exec sp_SelectVehicle"
DeleteCommand="exec sp_DeleteVehicle @original_id"
UpdateCommand="exec sp_UpdateVehicle @original_id, @dept_id, @vehiclestatus_id, @unit_id, @vnumber"
InsertCommand="exec sp_InsertVehicle @dept_id, @vehiclestatus_id, @unit_id, @vnumber"
OldValuesParameterFormatString="original_{0}"
>
<UpdateParameters>
<asp:Parameter Name="id" Type="Int32" />
<asp:Parameter Name="vnumber" Type="String" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name="vid" Type="Int32" />
</DeleteParameters>
</asp:SqlDataSource>