0

DetailsviewInsertItemTemplateの処理に問題があります。WROXの初心者向けASP.Net4をフォローしています。

テーブルEmployee(EmpId、Name、DoB、Sex、DeptId、Position)を持つdbaseがあります。Detailsviewを使用してこのテーブルに値を挿入しようとしています。

通常の詳細ビューを使用して、すべての値を挿入できます。正常に動作しますが、詳細ビューをテンプレートに変換すると問題が発生します。

私がしたこと?

-DetailsviewのSmartタグで、[フィールドの編集]をクリックしました。EmpIDと追加されたテンプレートフィールドを除くすべての使用可能なフィールドを使用可能なフィールドから削除します。-再びDetailsviewのスマートタグで、[テンプレートの編集]をクリックし、DropDownListで[InsertItemTemplate]を選択しました。-Toolboxの標準コンポーネントを使用して、名前のテキストボックスと、他のフィールドのドロップダウンリストを追加しました。(私はEmpIdを削除していないので、EmpIdは必要ありません)。-マークアップビューの残りの部分は次のとおりです。

登録するには、次の情報を入力してください。名前:  
DoB:      
性別:
DeptId:
位置:

-詳細ビューのInsertイベントのCSファイルの背後にあるコードは次のとおりです

protected void DetailsView1_ItemInserting1(object sender、DetailsViewInsertEventArgs e){string id = System.Guid.NewGuid()。ToString(); TextBox txt_name =(TextBox)DetailsView1.FindControl( "EmpId"); e.Values ["EmpId"] = id;

    DropDownList ddl_month = (DropDownList)DetailsView1.FindControl("DDL_Month");
    string month = ddl_month.SelectedValue;
    e.Values["DDL_Month"] = month;

    DropDownList ddl_day = (DropDownList)DetailsView1.FindControl("DDL_Day");
    string day = ddl_day.SelectedValue;
    e.Values["DDL_Day"] = day;

    DropDownList ddl_year = (DropDownList)DetailsView1.FindControl("DDL_Year");
    string year = ddl_year.SelectedValue;
    e.Values["DDL_Year"] = year;

    DropDownList ddl_sex = (DropDownList)DetailsView1.FindControl("DDL_Sex");
    string sex = ddl_sex.SelectedValue;
    e.Values["DDL_Sex"] = sex;

    DropDownList ddl_pos = (DropDownList)DetailsView1.FindControl("DDL_Pos");
    string pos = ddl_pos.SelectedValue;
    e.Values["DDL_Pos"] = pos;

    DropDownList ddl_deptid = (DropDownList)DetailsView1.FindControl("DDL_DeptId");
    string deptid = ddl_deptid.SelectedValue;
    e.Values["DDL_DeptId"] = deptid;
}

-生年月日のドロップダウンリストから選択した3つの値を組み合わせて、データベースに追加する方法も教えてください。

ありがとうございました!!!

4

2 に答える 2

1

組み込みの.NETコントロールを使用すると、通常、生成されたフィールドを削除しようとすると問題が発生します。このように機能させるための最善の策は、使用しているコントロールを完全に削除して再度追加し、テンプレートを使用しようとしているフィールドを変更してみることです。これを機能させるにはまだいくつかの問題があるかもしれませんが、それほど難しいことではありません。

このようにコントロールを使用することは柔軟ではない傾向があり、問題を修正することは困難です。そのため、ほとんどの経験豊富な開発者は、この「簡単な」方法を放棄し、フォームを作成して値を読み取り、関連するSQL更新を実行するメソッドに渡すことでデータベースの更新を手動で行います。習得するにはしばらく時間がかかりますが、コツをつかむと簡単になり、コントロールを操作するために必要な.NET固有の方法に取り組む際の非常に困難な問題を解決できます。

于 2012-07-30T21:40:07.927 に答える
1

詳細に:

はい、それが最初のステップになります。接続文字列は、Web.configの''要素の下に追加する必要があります。

http://msdn.microsoft.com/en-us/library/bf7sd233.aspx

次に、これをコードで読み取ることができます。

web.configから接続文字列を読み取ります

以下は、フォームから取得した値に基づいてSQLデータベースにデータベースを更新するための適度に優れた一般的なフォームを示しています-C#で実行されます(さまざまな理由から、VB.NETの代わりに開始することをお勧めします)。

テキストボックスの値でデータベースを更新します

これは、web.configからではなく、コード内に直接接続文字列を追加する方法を示しています。これは、最初のインスタンスではより簡単な場合があります。これは、クエリで「パラメータ」を使用してデータベースを更新する方法を示しています(必要に応じて「変数」は@記号で示されます)。パラメータの使用は、慣れる価値のある基本的なグッドプラクティスです(理由についてはあまり心配しないでください。ただし、ハッカーがWebサイトを攻撃するために使用する「SQLインジェクション」手法を調査することをお勧めします)。これはあなたにとって良い出発点です。最初は複雑に思えるかもしれませんが、数年の経験を持つ開発者に聞いてみると、一般的にはそれが道のりだと言われます。開発が進むにつれて、.NETが提供する魅力的な「すぐに使える」ものはますます制限されます。

私が与えた例は、実際にはまだ比較的単純です。開発するにつれて、コードに取り入れ始めるべき他の側面があります。特に、「データアクセス層」(多くの場合、 「ビジネスロジック層」などと呼ばれる中間層が使用されますが、それについてはまだ心配しないでください)。

また、私が示した例は、コードが何をしているのかを明確に示すメソッドにコードの一部をパッケージ化することです。たとえば、より単純なレベルでは、メソッド「UpdateMachineDetails」を使用して、少なくとも更新するコードをカプセル化できます。データベース。

.NETで「手動で」データベースを更新する方法を示すGoogleのチュートリアルはたくさんありますが、私が提供するフォームは、ソフトウェアによって業界全体で使用されるベストプラクティスに向けた良い軌道にあなたを導きます開発者。

于 2012-07-31T21:29:41.400 に答える