PageindexChanging TargetInvocationExeption
-
05-07-2019 - |
質問
グリッドビューでページングのシナリオを整理するのに少し苦労しています。つまり、ページ、2、3、4などを表示するために血まみれのものを得ることができません。
次のグリッドビューコードがあります
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
style="z-index: 1; left: 20px; top: 440px; position: absolute; height: 133px; "
AllowPaging="True" AllowSorting="True" Font-Size="Small"
PageSize="2" onpageindexchanging="GridView1_PageIndexChanging">
<Columns>
次の
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
今、&quot; TargetinvocationExceptionがユーザーコードによって処理されませんでした。&quot;
初心者であるため、これは私の現在の能力を超えており、やや混乱しています。グリッドビューを適切にバインドして、ページングが正しく動作するようにするにはどうすればよいですか?
解決 3
バインディングは実際にうまくいきました。これは最終的に主キーを追加することでソートされました(最初に実際に実装する必要がありました!)
だから誰かがこれを読んでいる場合、オブジェクトデータソースを介してページにグリッドビューを取得することはできません、主キーを持っていることを確認してください!!!
他のヒント
ここが面白いところです!私はlinqデータソースを使用しています:
<asp:LinqDataSource ID="**lqPackWeights**" runat="server"
ContextTypeName="ORWeightsDataClassesDataContext"
Select="new (UnitId, UnitDescription, PackagingTypeCode, UnitWeight, WeightUnitCode, RecycledContent, IsBiodegradable, Recyclability, RevisionSourceCode, RevisionDate, ExtendedMaterialName, MaterialText, WeightStatus, ProductPercentage, UnitUserfield1, UnitUserfield2, IDDesc, MaterialLevel)"
TableName="tblOnlineReportingCOMPLETEWeights" Where="IDDesc == @IDDesc">
</asp:LinqDataSource>
これにより生成されるlqPackWeights:
private object GetMaterialData(string MemberKey, string MaterialType, string MaterialLevel, int Count)
{
ORWeightsDataClassesDataContext db = new ORWeightsDataClassesDataContext();
var query = db.tblOnlineReportingCOMPLETEWeights
.Where(x => x.MaterialLevel == MaterialLevel && x.MaterialText == MaterialType && x.MemberId == MemberKey)
.OrderByDescending(x => x.ProductPercentage).Take(Count);
return query;
}
protected void btSearch_Click(オブジェクト送信者、EventArgs e) {
lqPackWeights.WhereParameters.Clear();
ControlParameter cp = new ControlParameter();
cp.Type = TypeCode.String;
if (radBuyer.Checked)
{
cp.ControlID = "ddlProd";
cp.PropertyName = "SelectedValue";
cp.Name = "IDDesc";
lqPackWeights.WhereParameters.Add(cp);
GridView1.DataSourceID = "lqPackWeights";
GridView1.DataBind();
}
else if (radProd.Checked)
{
cp.ControlID = "tbxProdAC";
cp.PropertyName = "Text";
cp.Name = "IDDesc";
lqPackWeights.WhereParameters.Add(cp);
GridView1.DataSourceID = "lqPackWeights";
GridView1.DataBind();
}
1つあまりにも多くのバインドが行われているのではないかと思われます...私のコードから問題なく言うことができるように、これは私にとって新しい領域なので、乱用に優しくしてください!
さて、データソースでスローする必要がある場所をいくつか読んだので、次のコードを取得しました
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataSourceID = "lqPackWeights";
}
今、ページを作成すると正常に動作しますが、xの2ページ目を押すと、この厄介な小さなメッセージが表示されます。
「/ onlineReportingFUNCTIONING」アプリケーションのサーバーエラー。
このプロバイダーは、すべてのID列を含むエンティティまたはプロジェクションを返す順序付きクエリでのみSkip()をサポートします。クエリは単一テーブル(非結合)クエリ、またはDistinct、Except、Intersect、またはUnion(連結ではない)操作。
あれはどうですか?!