ASP.NET:列が表示されていない場合、GridView値はnullに設定されます

StackOverflow https://stackoverflow.com/questions/416861

  •  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(); としてセル値にアクセスします

に問題の解決策を示す簡単な投稿を書きました。ここ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top