如何使用2个参数更新网格视图

本文关键字:网格 视图 更新 参数 何使用 2个 | 更新日期: 2023-09-27 18:20:02

我是新手,可能做错了什么。我正在尝试使用两个不同的参数生成一个过滤视图。

当我传入一个参数时,我的代码工作

           <asp:ListBox ID="ReportListItemsLb" runat="server" DataSourceID="ReportItems" 
    DataTextField="ReportGroupName" DataValueField="ReportGroupId" Height="134px" 
        Width="217px" AutoPostBack="True">
</asp:ListBox>
<asp:SqlDataSource ID="ReportItems" runat="server" 
    ConnectionString="<%$ ConnectionStrings:WeighBridgeDataConnectionString %>" 
    SelectCommand="SELECT ReportGroupName, ReportGroupId FROM MonthlyReports.ReportGroups">
</asp:SqlDataSource>
    <asp:ListBox ID="DateLb" runat="server" AutoPostBack="True" 
        DataSourceID="MainPullBack" DataTextField="Date" DataValueField="Date" 
        Height="106px" Width="218px"></asp:ListBox>
    <asp:SqlDataSource ID="MainPullBack" runat="server" 
        ConnectionString="<%$ ConnectionStrings:WeighBridgeDataConnectionString %>" 
        SelectCommand="SELECT distinct MonthlyReports.ReportWSDOUTData.Date 
        FROM MonthlyReports.ReportWSDOUT INNER JOIN MonthlyReports.ReportWSDOUTData ON 
        MonthlyReports.ReportWSDOUT.WSDOUTId = MonthlyReports.ReportWSDOUTData.WSDOUTId 
        WHERE (MonthlyReports.ReportWSDOUT.ReportGroupId = @reportgroupid) AND (MonthlyReports.ReportWSDOUT.Active = 1)">
        <SelectParameters>
            <asp:ControlParameter ControlID="ReportListItemsLb" Name="reportgroupid" 
                PropertyName="SelectedValue" />
        </SelectParameters>
    </asp:SqlDataSource>
    <asp:GridView ID="AllInOneViewGV" runat="server" AutoGenerateColumns="False" 
        DataSourceID="AllInOneView">
        <Columns>
            <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
            <asp:BoundField DataField="Waste" HeaderText="Waste" SortExpression="Waste" />
            <asp:BoundField DataField="Source" HeaderText="Source" 
                SortExpression="Source" />
            <asp:BoundField DataField="Destination" HeaderText="Destination" 
                SortExpression="Destination" />
            <asp:BoundField DataField="Data1" HeaderText="Data1" SortExpression="Data1" />
            <asp:BoundField DataField="Data2" HeaderText="Data2" SortExpression="Data2" />
            <asp:BoundField DataField="Data3" HeaderText="Data3" SortExpression="Data3" />
            <asp:BoundField DataField="Data4" HeaderText="Data4" SortExpression="Data4" />
            <asp:BoundField DataField="Data5" HeaderText="Data5" SortExpression="Data5" />
            <asp:BoundField DataField="WSDOUTId" HeaderText="WSDOUTId" 
                SortExpression="WSDOUTId" />
            <asp:BoundField DataField="ReportGroupId" HeaderText="ReportGroupId" 
                SortExpression="ReportGroupId" />
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="AllInOneView" runat="server" 
        ConnectionString="<%$ ConnectionStrings:WeighBridgeDataConnectionString %>" 
        SelectCommand="SELECT  MonthlyReports.ReportWSDOUTData.Date, MonthlyReports.ReportWSDOUT.Waste,
         MonthlyReports.ReportWSDOUT.Source, MonthlyReports.ReportWSDOUT.Destination, MonthlyReports.ReportWSDOUTData.Data1,
          MonthlyReports.ReportWSDOUTData.Data2, MonthlyReports.ReportWSDOUTData.Data3, MonthlyReports.ReportWSDOUTData.Data4,
           MonthlyReports.ReportWSDOUTData.Data5, MonthlyReports.ReportWSDOUTData.WSDOUTId, MonthlyReports.ReportWSDOUT.ReportGroupId 
           FROM MonthlyReports.ReportWSDOUT INNER JOIN MonthlyReports.ReportWSDOUTData ON
            MonthlyReports.ReportWSDOUT.WSDOUTId = MonthlyReports.ReportWSDOUTData.WSDOUTId 
            WHERE (MonthlyReports.ReportWSDOUT.ReportGroupId = @reportgroupid) AND (MonthlyReports.ReportWSDOUT.Active = 1) ">
        <SelectParameters>
            <asp:ControlParameter ControlID="ReportListItemsLb" Name="reportgroupid" 
                PropertyName="SelectedValue" />
        </SelectParameters>
    </asp:SqlDataSource>
</asp:Content>

但当我添加第二个参数来按日期过滤时,什么也没发生

    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:ListBox ID="ReportListItemsLb" runat="server" DataSourceID="ReportItems" 
    DataTextField="ReportGroupName" DataValueField="ReportGroupId" Height="134px" 
        Width="217px" AutoPostBack="True">
</asp:ListBox>
<asp:SqlDataSource ID="ReportItems" runat="server" 
    ConnectionString="<%$ ConnectionStrings:WeighBridgeDataConnectionString %>" 
    SelectCommand="SELECT ReportGroupName, ReportGroupId FROM MonthlyReports.ReportGroups">
</asp:SqlDataSource>
    <asp:ListBox ID="DateLb" runat="server" AutoPostBack="True" 
        DataSourceID="MainPullBack" DataTextField="Date" DataValueField="Date" 
        Height="106px" Width="218px"></asp:ListBox>
    <asp:SqlDataSource ID="MainPullBack" runat="server" 
        ConnectionString="<%$ ConnectionStrings:WeighBridgeDataConnectionString %>" 
        SelectCommand="SELECT distinct MonthlyReports.ReportWSDOUTData.Date 
        FROM MonthlyReports.ReportWSDOUT INNER JOIN MonthlyReports.ReportWSDOUTData ON 
        MonthlyReports.ReportWSDOUT.WSDOUTId = MonthlyReports.ReportWSDOUTData.WSDOUTId 
        WHERE (MonthlyReports.ReportWSDOUT.ReportGroupId = @reportgroupid) AND (MonthlyReports.ReportWSDOUT.Active = 1)">
        <SelectParameters>
            <asp:ControlParameter ControlID="ReportListItemsLb" Name="reportgroupid" 
                PropertyName="SelectedValue" />
        </SelectParameters>
    </asp:SqlDataSource>
    <asp:GridView ID="AllInOneViewGV" runat="server" AutoGenerateColumns="False" 
        DataSourceID="AllInOneView">
        <Columns>
            <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
            <asp:BoundField DataField="Waste" HeaderText="Waste" SortExpression="Waste" />
            <asp:BoundField DataField="Source" HeaderText="Source" 
                SortExpression="Source" />
            <asp:BoundField DataField="Destination" HeaderText="Destination" 
                SortExpression="Destination" />
            <asp:BoundField DataField="Data1" HeaderText="Data1" SortExpression="Data1" />
            <asp:BoundField DataField="Data2" HeaderText="Data2" SortExpression="Data2" />
            <asp:BoundField DataField="Data3" HeaderText="Data3" SortExpression="Data3" />
            <asp:BoundField DataField="Data4" HeaderText="Data4" SortExpression="Data4" />
            <asp:BoundField DataField="Data5" HeaderText="Data5" SortExpression="Data5" />
            <asp:BoundField DataField="WSDOUTId" HeaderText="WSDOUTId" 
                SortExpression="WSDOUTId" />
            <asp:BoundField DataField="ReportGroupId" HeaderText="ReportGroupId" 
                SortExpression="ReportGroupId" />
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="AllInOneView" runat="server" 
        ConnectionString="<%$ ConnectionStrings:WeighBridgeDataConnectionString %>" 
        SelectCommand="SELECT  MonthlyReports.ReportWSDOUTData.Date, MonthlyReports.ReportWSDOUT.Waste,
         MonthlyReports.ReportWSDOUT.Source, MonthlyReports.ReportWSDOUT.Destination, MonthlyReports.ReportWSDOUTData.Data1,
          MonthlyReports.ReportWSDOUTData.Data2, MonthlyReports.ReportWSDOUTData.Data3, MonthlyReports.ReportWSDOUTData.Data4,
           MonthlyReports.ReportWSDOUTData.Data5, MonthlyReports.ReportWSDOUTData.WSDOUTId, MonthlyReports.ReportWSDOUT.ReportGroupId 
           FROM MonthlyReports.ReportWSDOUT INNER JOIN MonthlyReports.ReportWSDOUTData ON
            MonthlyReports.ReportWSDOUT.WSDOUTId = MonthlyReports.ReportWSDOUTData.WSDOUTId 
            WHERE (MonthlyReports.ReportWSDOUT.ReportGroupId = @reportgroupid) AND (MonthlyReports.ReportWSDOUT.Active = 1) and MonthlyReports.ReportWSDOUTData.date=@date">
        <SelectParameters>
            <asp:ControlParameter ControlID="ReportListItemsLb" Name="reportgroupid" 
                PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="DateLb" Name="date" 
                PropertyName="SelectedValue" />
        </SelectParameters>
    </asp:SqlDataSource>
</asp:Content>

有人能指出我哪里出了问题,并帮助我找出解决方法吗?

谢谢,

Mike

如何使用2个参数更新网格视图

只需在aspx:中添加参数的类型

<asp:Parameter ControlID="ReportListItemsLb" Name="reportgroupid" PropertyName="SelectedValue" type="DateTime"></asp:Parameter>

试试这个。

1.创建一个方法,如果存储过程中没有传递参数,该方法将返回db null

public static object GetDataValue(object o)
{
    if (o == null || String.Empty.Equals(o))
        return DBNull.Value;
    else
        return o;
}

2.创建一个方法,该方法将调用存储过程并填充数据集。

public DataSet GetFillGvds(string param_1, string param_2) {
try
{
    DataSet oDS = new DataSet();
    SqlParameter[] oParam = new SqlParameter[2];

    oParam[0] = new SqlParameter("@Param1", GetDataValue(param_1));
    oParam[1] = new SqlParameter("@Param1", GetDataValue(param_2));
    oDS = SqlHelper.ExecuteDataset(DataConnectionString, CommandType.StoredProcedure, "spTest", oParam);
    return oDS;
}
catch (Exception e)
{
    ErrorMessage = e.Message;
    return null;
}
}

创建一个数据集以绑定网格视图中的数据。例如,

DataSet FillGvds = new DataSet();
param1FillGvds = "param1";
param2FillGvds = "";
FillGvds = GetFillGvds();// Assuming you have created the method to fill the dataset.
if(FillGvds != null)
{
 if(FillGvds.Tables[0].Rows.Count > 0)
 {
  GridView1.Datasource = FillGvds;
  GridView1.DataBind();
  label1.Text = Convert.ToString(FillGvds.Tables[0].Rows.Count);
 }
}

In order to pass the db null you query should be like this.
SELECT *(whatever you want) 
FROM YourTableName
WHERE colName1 = COALESCE(@colName1, colName1) AND
colName2 = COALESCE(@colName2,colName2)