.Net 4.0; VS2012
私の同様のケースでは、ボタンを含め、エクスポートされたグリッドの 100% を確認することで、Kedar が大まかに説明したことと同じように、RemoveAt(index) に列を削除する仕事をさせようとするのは無駄だと結論付けました。私がエクスポートしているグリッドビュー。なぜそうならないのかはわかりませんが、RemoveAt の後、グリッドビューは常に変更されません。
ボードで同様の質問を見たことがありますが、受け入れられた回答 - Excel にエクスポートしたいと思っていた投稿者への、エクスポート時に指定された列を非表示にしたい - は、不要な列を.Visible. 回答者は親切にも寄稿してくれましたが、要点を見逃していました。目標は、問題の列を EXPORT に表示しないことでした。列を非表示にすることが簡単な (Visible=false に設定) 画面表示から消えるだけではありません。
私の場合、再バインドせず、動的なSQLを導入せずに、Excelに送信されたときに、グリッドビューの列を失わせようとしています。エラーが発生していなくても、RemoveAt(index) が機能していないだけなので、原因が失われた可能性があると思います。gridview.Columns.RemoveAt(index) がその機能を非常に確実に実行しないようにするために、私ができることを不思議に思っています。すべての列は、実行後も存在し続けます。
次のコードでは、私の目標は、1 つの列を削除して、RemoveAt(index) が何かを実行することを確認することです。
GridView gProgramProposalRequests が UI に表示されます。
列を削除したいので、gridForExport のコピーを作成してから、gridForExport をエクスポート メソッドに渡します。「タイトル」はグリッド内の列の 1 つで、この実行で例の列として使用されます。
GridView gridForExport = (GridView)gProgramProposalRequests;
gridForExport.AutoGenerateColumns = false;
for (int i = 0; i < gridForExport.Columns.Count; i++)
{
if (gridForExport.Columns[i].HeaderText == "Title")
gridForExport.Columns.RemoveAt(i);
}
ループの後、「タイトル」はまだ存在しています。Titleという名前の列を削除するようにアプリに指示したと思いました。実行カーソルが RemoveAt 行を実行するのを見ます。どの列を指定しても問題ありません。このループが実行された後でも、名前を付けた列を見つけることができます。
フォローアップ - GridView のコレクションから列を削除しようとしても成功しませんでした。今では、代わりに CSV コンテンツを応答に書き込むことで得られる結果が好きで、指定した列が追加されないようにしています。しかし、コンテンツ フィールドでコンマを処理する方法を理解する必要があります。http://wiki.asp.net/page.aspx/401/export-to-csv-file/に感謝します