0

私はこのことを学び始めたばかりなので、ご容赦ください。

私は VS 2010 Web プロジェクトを立ち上げており、カスタムを作成する方法を理解しようとしていますUpdateCommand(独自の SQL ステートメントを作成することを選択したため、VS 2010 が更新コマンドを自動生成するオプションがありません。 ) 問題は次のとおりです: がどのように見えるべきかわかりませんUpdateCommand。これが私の選択です:

SELECT * FROM Dbo.MainAsset, dbo.Model, dbo.Hardware WHERE MainAsset.device = Hardware.DeviceID AND MainAsset.model = Model.DeviceID

VS 2010 は次のようになります。

SELECT MainAsset.pk, MainAsset.img, MainAsset.device, MainAsset.model, MainAsset.os, MainAsset.asset, MainAsset.serial, MainAsset.inyear, MainAsset.expyear, MainAsset.site, MainAsset.room, MainAsset.teacher, MainAsset.FirstName, MainAsset.LastName, MainAsset.Notes, MainAsset.Dept, MainAsset.AccountingCode, Model.Model AS Hardware, Model.pk AS Model, Model.DeviceID, Hardware.Computer, Hardware.pk AS Expr3, Hardware.DeviceID AS Expr4 FROM MainAsset INNER JOIN Hardware ON MainAsset.device = Hardware.DeviceID INNER JOIN Model ON MainAsset.model = Model.DeviceID

Gridview DDLで変更された場合、「MainAsset.site」などの1つの列を更新するにはどうすればよいですか? 建設的な助けをいただければ幸いです。ありがとうございました。

4

2 に答える 2

2

SqlDataSourceとGridViewでUpdateCommandを使用したいと思います。

updateコマンドはSQLを使用します

Update yourTable SET columnName = 'yourValue';
Update MainAsset Set site ='http://stackoverflow.com';

msdnの例では、データベースの列(フィールド)がgridview1にバインドされています。BoundFieldの値は、DataFieldの値に@を付けて渡すことができます。データベース列のLastNameはグリッド列にバインドさ<asp:BoundField HeaderText="Last Name" DataField="LastName" />れ、更新コマンドで@LastNameを使用して値を渡します。

 <asp:SqlDataSource
      id="SqlDataSource1"
      runat="server"
      DataSourceMode="DataSet"
      ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
      SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees"
      UpdateCommand="Update Employees SET   
         FirstName=@FirstName,LastName=@LastName,
         Title=@Title WHERE EmployeeID=@EmployeeID"
      OnUpdated="OnDSUpdatedHandler">
  </asp:SqlDataSource>

  <asp:GridView
      id="GridView1"
      runat="server"
      AutoGenerateColumns="False"
      DataKeyNames="EmployeeID"
      AutoGenerateEditButton="True"
      DataSourceID="SqlDataSource1">
      <columns>
          <asp:BoundField HeaderText="First Name" DataField="FirstName" />
          <asp:BoundField HeaderText="Last Name" DataField="LastName" />
          <asp:BoundField HeaderText="Title" DataField="Title" />
      </columns>
  </asp:GridView>

コメントに対応するために更新

さまざまSelect * from Dbo.MainAsset, dbo.Model ...なテーブルからデータをロードし、それらを1つの大きなテーブルとして表示します。これは結合と呼ばれます。Selectは、新しい構文ではなく、古い結合構文を使用します

あなたのコメントを理解できるかどうかはわかりません。「構文がUpdateCommandをどのように検索するかを尋ねています。」更新では、3つのテーブルすべて(MainAsset、Model、およびHardware)の値を更新しますか?この場合、グリッドに表示される単一の列を知る必要があります。この質問またはこの更新結合の説明を参照して、結合による更新をよりよく理解することができます。

UpdateCommandのUpdate2構文

  1. カスタムUpdateCommandを作成するにはどうすればよいですか?
  2. 「MainAsset.site」など、1つの列を更新するにはどうすればよいですか。
  3. ドロップダウンリストが変更された場合にレコードを更新するにはどうすればよいですか?

まず、SQLServerの通常の更新ステートメントがどのように見えるかを知る必要があります。

UPDATE MainAsset
    SET site= NewValueForSite
        ,teacher = 'Dr. Seuss'
    WHERE rowId = FilterValue

カスタム更新コマンドを作成するには、必要なSQLを記述し、それをSqlDataSourceのプロパティUpdateCommandに割り当てる/渡します。次のようにすることができます(pkが主キーを表し、行を識別すると仮定します)。

 <asp:SqlDataSource
      id="SqlDataSource1"
      // ... see above          
      UpdateCommand="Update MainAsset SET   
         site=@site
         ,teacher=@teacher,
         WHERE pk=@pk"
      OnUpdated="OnDSUpdatedHandler">
  </asp:SqlDataSource>

あなたの3番目の質問に関して私はあなたにこの質問を指摘したいと思います:

<asp:DropDownList ID="ddlSite" runat="server"  
   AutoPostBack="True" 
   OnSelectedIndexChanged="SelectionHasChanged"
   DataSourceID="SqlDataSource1" DataTextField="site"
   DataValueField="pk" AppendDataBoundItems="true">
于 2012-10-26T23:04:13.347 に答える
-1

簡単に言えば、これが私がやったことです:

問題の DDL:

            <asp:TemplateField HeaderText="site" SortExpression="site">
                <EditItemTemplate>
                    <asp:DropDownList ID="ddlSites" runat="server" AutoPostBack="True" 
                        DataSourceID="RetrieveSiteSQL" DataTextField="Sites" DataValueField="Sites" 
                        SelectedValue='<%# Bind("site") %>'>
                    </asp:DropDownList>
                </EditItemTemplate>

私のRetrieveSiteSQLは更新コマンドを必要とするものではなく、「更新」をクリックすると更新されたのは私の「メイン」SQLデータソースであることがわかりました(編集テンプレート内)。 UpdateCommand="UPDATE MainAsset ..." ステートメントは次のようになります。

UpdateCommand="UPDATE MainAsset SET [site] = @Site WHERE [pk] = @pk">

今は別の問題がありますが、それは別の問題なので、このサイトに別の質問を投稿します。

助けてくれてありがとう。

于 2012-11-07T16:12:18.647 に答える