简体   繁体   English

绑定到ObjectDataSource的Gridview不显示数据ASP.Net

[英]Gridview Binded to ObjectDataSource not showing data ASP.Net

I have these two gridviews using the same approach to show data. 我使用相同的方法来显示这两个gridviews。 The first one returns data as expected. 第一个按预期返回数据。 Now, the second one is not returning data at all, and I can't find why? 现在,第二个根本不返回数据,我找不到原因吗? Can someone please look into this to tell me what on earth is going on here? 有人可以看着这个告诉我这到底是怎么回事吗?

.aspx 的.aspx

<body>
<form id="form1" runat="server">
<div>
    <asp:Button ID="btnAction" runat="server" Text="Action" 
        onclick="btnAction_Click" />
    <br />
    <br />
    <br />
    <asp:Label ID="Label1" runat="server" Text="Grid1 Empty"></asp:Label>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="ObjectDataSource1">
        <Columns>
            <asp:BoundField DataField="ReleaseId" HeaderText="ReleaseId" 
                SortExpression="ReleaseId" />
            <asp:BoundField DataField="ReleaseSubmitDate" HeaderText="ReleaseSubmitDate" 
                SortExpression="ReleaseSubmitDate" />
            <asp:BoundField DataField="ExpirationDate" HeaderText="ExpirationDate" 
                SortExpression="ExpirationDate" />
            <asp:BoundField DataField="ExpirationStatus" HeaderText="ExpirationStatus" 
                ReadOnly="True" SortExpression="ExpirationStatus" />
        </Columns>
    </asp:GridView>
    <br />
    <br />
    <br />
    <asp:Label ID="Label2" runat="server" Text="Grid2 Empty"></asp:Label>
    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" 
        DataSourceID="ObjectDataSource2">
        <Columns>
            <asp:BoundField DataField="BinLoc" HeaderText="BinLoc" 
                SortExpression="BinLoc" />
            <asp:BoundField DataField="Product" HeaderText="Product" 
                SortExpression="Product" />
            <asp:BoundField DataField="Quantity" HeaderText="Quantity" 
                SortExpression="Quantity" />
            <asp:BoundField DataField="Reserved" HeaderText="Reserved" 
                SortExpression="Reserved" />
            <asp:BoundField DataField="SiteId" HeaderText="SiteId" 
                SortExpression="SiteId" />
            <asp:BoundField DataField="Zone" HeaderText="Zone" SortExpression="Zone" />
            <asp:BoundField DataField="WOAAvail" HeaderText="WOAAvail" 
                SortExpression="WOAAvail" />
            <asp:BoundField DataField="InWO" HeaderText="InWO" SortExpression="InWO" />
            <asp:BoundField DataField="QtyResrv" HeaderText="QtyResrv" 
                SortExpression="QtyResrv" />
            <asp:BoundField DataField="QtyAvail" HeaderText="QtyAvail" 
                SortExpression="QtyAvail" />
        </Columns>
    </asp:GridView>
    <br />
    <br />
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
        OldValuesParameterFormatString="original_{0}" SelectMethod="GetData" 
        TypeName="DALTest.DAL.dsReleaseTableAdapters.sp_ET_SWR_GetReleases_ByModelId_CustomerId_RegionIdTableAdapter">
        <SelectParameters>
            <asp:Parameter Name="ModelId" Type="Int32" />
            <asp:Parameter Name="CustomerId" Type="Int32" />
            <asp:Parameter Name="RegionId" Type="Int32" />
        </SelectParameters>
    </asp:ObjectDataSource>
    <asp:ObjectDataSource ID="ObjectDataSource2" runat="server" 
        OldValuesParameterFormatString="original_{0}" SelectMethod="GetData"             
        TypeName="DALTest.DAL.dsAvailabilityTableAdapters.sprGetRBProdBinDetlTableAdapter">    
        <SelectParameters>
            <asp:Parameter Name="InvtId" Type="String" />
            <asp:Parameter Name="IdModel" Type="Int32" />
            <asp:Parameter Name="SiteId" Type="String" />
        </SelectParameters>        
    </asp:ObjectDataSource>
</div>
</form>

aspx.cs aspx.cs

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Label1.Visible = false;
            Label2.Visible = false;
        }
    }

    protected void btnAction_Click(object sender, EventArgs e)
    {
        Label1.Visible = false;
        Label2.Visible = false;
        FillResults();
        FillResults2();
    }

    private void FillResults()
    {
        ObjectDataSource1.SelectParameters["ModelId"].DefaultValue = "7461";
        ObjectDataSource1.SelectParameters["CustomerId"].DefaultValue = "112";
        ObjectDataSource1.SelectParameters["RegionId"].DefaultValue = "91";

        try
        {
            GridView1.DataBind();
        }
        catch (Exception ex)
        {
        }

        if (GridView1.Rows.Count == 0)
        {
            Label1.Visible = true;
        }
    }

    private void FillResults2()
    {
        ObjectDataSource2.SelectParameters["InvtId"].DefaultValue = "11000020982";
        ObjectDataSource2.SelectParameters["IdModel"].DefaultValue = "";
        ObjectDataSource2.SelectParameters["SiteId"].DefaultValue = "";

        try
        {
            GridView2.DataBind();
        }
        catch (Exception ex)
        {
        }

        if (GridView2.Rows.Count == 0)
        {
            Label2.Visible = true;
        }
    }        

And the stored procedure is returning data for the selected parameters: 存储过程将返回所选参数的数据:

在此处输入图片说明

Now, if I do this: 现在,如果我这样做:

private void FillResults(string aProduct, string aIdModel, string aSiteId)
    {
        using (SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ETConnStr"].ToString()))
        {
            try
            {
                SqlCommand Cmd = new SqlCommand("sprGetRBProdBinDetl", Conn);
                Cmd.Parameters.Add("@InvtId", SqlDbType.VarChar, 30).Value = aProduct;
                Cmd.Parameters.Add("@IdModel", SqlDbType.Int).Value = aIdModel;
                Cmd.Parameters.Add("@SiteId", SqlDbType.VarChar, 20).Value = aSiteId;
                Cmd.CommandType = CommandType.StoredProcedure;

                SqlDataAdapter adapter = new SqlDataAdapter(Cmd);
                DataSet ds = new DataSet();
                adapter.Fill(ds, "PNAvail");
                GridView2.DataSource = ds;
                GridView2.DataBind();

            }
            catch (Exception ex)
            {
            }
        }
    }

Then the gridview shows data, so I don't know what could be wrong here :( 然后gridview显示数据,所以我不知道这里可能有什么问题:(

SP code snippet SP代码段

PROCEDURE [dbo].[sprGetRBProdBinDetl] 
@InvtId varchar(30) = '', @IdModel int = 0, @SiteId varchar(20) = ''
AS

if @IdModel = 0 --> This will be always the case
begin   
    select 
        BINLABEL BinLoc, 
        Product, 
        Quantity, 
        Reserved, 
        ClientName SiteId, 
        Zone
    from 
        tblTable
    where 
        product = case when @InvtId = '' then product else @InvtId end
        and ClientName = case when @siteid = '' then ClientName else @SiteId end
end

you have to add values in your parameter default value, else the query will return nothing try this: 您必须在参数默认值中添加值,否则查询将不返回任何内容,请尝试以下操作:

private void FillResults2()
    {
        ObjectDataSource2.SelectParameters["InvtId"].DefaultValue="11000020982";
        ObjectDataSource2.SelectParameters["IdModel"].DefaultValue = "1";
        ObjectDataSource2.SelectParameters["SiteId"].DefaultValue = "1";

        try
        {
            GridView2.DataBind();
        }
        catch (Exception ex)
        {
        }

        if (GridView2.Rows.Count == 0)
        {
            Label2.Visible = true;
        }

#Update1 #UPDATE1

public DataSet Getdata(string IdModel)
{
 if (IdModel!= null)
    if (IdModel.Trim() != "")
    {
        yourquery= yourquery.Where(c => c.IdModel== IdModel.Trim());
    }
//and so on
}

The only difference in the both approaches is that @IdModel is of type SqlDbType.Int in your second approach and in the first approach you are passing it as a string . 两种方法的唯一区别是, @IdModel在第二种方法中的类型为SqlDbType.Int ,在第一种方法中,您将其作为string传递。 Try this 尝试这个

Parameter parm = new Parameter("IdModel",TypeCode.Int32);
ObjectDataSource2.SelectParameters.Add(parm);

If this doesn't work you could also try the Selecting event of the ObjectDataSource . 如果这不起作用,您还可以尝试ObjectDataSourceSelecting事件

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM