【发布时间】: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