ASP.NET:列が表示されていない場合、GridView値はnullに設定されます
-
03-07-2019 - |
質問
GridViewのデータソースとしてオブジェクトのリストを使用していますが、列を非表示に設定すると、それらの列の値がnullに変更されるため更新が失敗します(列はnullを許可しません) 。列が表示されているときに値は存在しますが、ほとんどの場合、ユーザーが実際に見る必要のないID列であるため、これらの列は表示したくありません。
編集:非表示フィールドオプションを試しましたが、まだ値がnullに設定されています。ページのソースを確認しましたが、非表示フィールドは適切な値で存在しています...
解決
.Net 2.0の非表示列をシミュレートするこのソリューションが見つかりました:
GridView.RowCreatedイベントを実装します。
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[1].Visible = false;
e.Row.Cells[2].Visible = false;
}
リンクは次のとおりです。 http://www.beansoftware.com/ASP.NET-Tutorials/GridView -Hidden-Column.aspx
2.0で列が表示されていない場合、その列のデータバインディングは失敗しますが、リンクが確立された後にこのメソッドは非表示になるため、システムをだまします(?)。
他のヒント
DataKeyNamesの使用を推奨GridViewコントロールのプロパティ。
コードビハインドを使用して特定の列を非表示にする代わりに、GridViewからバインドされたフィールドを削除し、DataKeyNamesプロパティでそれらを指定できます。
<asp:GridView ID="GridView1" runat="server"
DataKeyNames="SalesOrderID,SalesOrderDetailID"
DataSourceID="LinqDataSource1">
この方法では、フィールドはユーザーに表示されませんが、GridViewは更新などのために値を保持することを知っています
まだ行っていない場合は、データにテンプレート列を使用して、「手動」を実行することを検討します。データバインディング(「インライン」またはRowDataBoundイベントを使用するコードビハインドページ)。これにより、DBNullをテストし、値がNULLの場合、列に値を入力することを単に無視できます。これにより、列を適切に非表示にすることもできます。
表示したくない値の非表示フィールドでそれを行うことができます。そうすれば、今日と同じデータバインディングや他の機能を引き続き使用できます。
GridView内のフィールドを非表示にすると、そのセル値はアクセスしにくくなるか、nullまたは空になります。
この問題を解決するには、 DataKeyNames =&quot; colName1、colName2、colName3&quot;
を実行して、GridViewのDataKeyNamesプロパティに列名(非表示フィールド)を割り当てるだけです。
次に、 cellValue = GridView1.DataKeys [0] [&quot; ID&quot;]。ToString();
としてセル値にアクセスします