【问题标题】:Gridview Binded to ObjectDataSource not showing data ASP.NetGridview 绑定到 ObjectDataSource 不显示数据 ASP.Net
【发布时间】:2015-06-05 14:11:18
【问题描述】:

我有这两个网格视图使用相同的方法来显示数据。第一个按预期返回数据。现在,第二个根本没有返回数据,我找不到为什么?有人可以调查一下,告诉我这里到底发生了什么吗?

.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

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;
        }
    }        

并且存储过程正在返回所选参数的数据:

现在,如果我这样做:

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)
            {
            }
        }
    }

然后gridview显示数据,所以我不知道这里有什么问题:(

SP 代码 sn-p

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

【问题讨论】:

  • 很难看出哪里出了问题,因为您正在吞下异常。尝试在catch (Exception ex) 块内添加Label2.Text = ex.Message;,看看是否收到任何错误消息。
  • 这里也不例外,只是gridview中没有显示数据。
  • 你没有在catch (Exception ex)块内做任何事情,所以看起来没有例外,gridview没有任何数据。你试过我上面的建议了吗?
  • 是的,我也对代码进行了调试,但它从未进入 catch-exception 块
  • 尝试将值添加到您的默认值而不是传递空字符串

标签: c# asp.net gridview objectdatasource


【解决方案1】:

您必须在参数默认值中添加值,否则查询将不返回任何内容 试试这个:

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

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

【讨论】:

  • 欣赏你的方法@FerasSalim,但我已经有一个解决方法。我也用 SP 更新了我的帖子,所以你可以看到它。仍然无法使用 ObjectDataSource
【解决方案2】:

这两种方法的唯一区别是@IdModel 在您的第二种方法中属于SqlDbType.Int 类型,而在第一种方法中您将其作为string 传递。试试这个

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

如果这不起作用,您还可以尝试 Selecting eventObjectDataSource

【讨论】:

  • 两个参数都是Int32。在这两种方法中,我都将参数作为String 传递,因为ObjectDataSource2.SelectParameters["IdModel"].DefaultValue 需要String 值。在选择事件中也不起作用。我不知道这里有什么问题。无论如何,我使用帖子中的最后一个解决方案来解决我的问题。
猜你喜欢
  • 2017-01-30
  • 2013-05-09
  • 2018-05-18
  • 2013-12-16
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 2013-04-10
  • 2014-01-18
相关资源
最近更新 更多