私は 4.5 フレームワークの VS2012 で C# を独学で学んでおり、それを気に入っていますが、これは (引き続き) 困惑しているため、明らかな何かが欠けている場合は申し訳ありません。私はいくつかの新しいテストを行いました (最初の投稿 3/23 以来) が、今はさらに混乱しています。
reviews.xsd というプロジェクトに DataSet アイテムを追加しました。
プログラムで Review テーブルのすべてのデータを DataSet に入力し、Columns コレクションに 2 つの新しいフィールドを追加します。次に、EntityFramework を使用して Book テーブルに結合し、これら 2 つの新しいフィールドのデータを追加します。プログラムで GridView コントロール (dgvReviews) をこの入力された DataSet にリンクし、ページを開くとすべてが適切に表示されるため、DataSet へのすべてのデータの入力とリンクされた GridView コントロールは適切に機能します。
ただし、GridView コントロールの Columns コレクションは奇妙に空であるため、Visible プロパティを使用して列のスタイルを変更したり、非表示にしたり表示したりすることはできません。GridView を設定する DataSet の Columns コレクションが完成し、これらの値に通常どおりアクセスできます。
GridView コントロールの他のプロパティを参照するように多数のウォッチを設定しましたが、それらは正常に設定されているように見えます。たとえば、Rows コレクションはウォッチ ウィンドウを介して値を表示しますが、Columns コレクションへのすべてのアクセスは「列挙は結果を生成しませんでした」と表示します。 、」データはすべて正しく表示されますが (コードで Columns コレクションに明示的にアクセスしようとしない場合)。
私は初心者のプログラマーなので、アドバイスをいただければ幸いです。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// create reviews dataset, populate with standard data from Review table
reviews reviewDataSet = new reviews();
reviewsTableAdapters.reviewTableAdapter reviewDataAdapter = new reviewsTableAdapters.reviewTableAdapter();
reviewDataAdapter.Fill(reviewDataSet.review);
reviewDataSet.review.Columns.Add("bookName", typeof(string));
reviewDataSet.review.Columns.Add("bookDescription", typeof(string));
reviewDataSet.review.Columns["bookName"].SetOrdinal(3);
reviewDataSet.review.Columns["bookDescription"].SetOrdinal(4);
// use EF to populate data from Book table into new bookName and bookDescription fields
bookReviewsEntities bookConnection = new bookReviewsEntities();
foreach (reviews.reviewRow reviewEntry in reviewDataSet.review)
{
int bookNumber = reviewEntry.bookID;
var bookLookup = (from book in bookConnection.books
where book.bookID == bookNumber
select book).ToList();
reviewEntry.BeginEdit();
reviewEntry["bookName"] = bookLookup[0].title;
reviewEntry["bookDescription"] = bookLookup[0].description;
reviewEntry.EndEdit();
}
bookConnection.Dispose();
// next 2 lines verify the Columns collection of the DataSet is working fine
string test1 = reviewDataSet.review.Columns[0].ToString();
string test2 = reviewDataSet.review.Columns[1].ToString();
dgvReviews.DataSource = reviewDataSet.review;
dgvReviews.DataBind();
// everything runs and displays normally if next line is commented out
dgvReviews.Columns[0].Visible = false; // crashes with "index out of range" since "Columns" collection is empty
}
}