2017-01-11 18 views
0

SQLDataSourceのSelect/Insert/UpdateコマンドでGridviewを使用しています。 Gridviewを使用して値を更新または変更しても問題ありません。しかし最近は、Javascriptを使用してデータを取得する別のプラグインを追加しました。データを取得してSQLのソースデータにする必要があります。私はこれを行うことができますどのような方法ですか?このようなVB.net - SQL Updateコマンドでカスタムパラメータを渡す

何か:私は行を更新するために、GridViewのを使用する場合

<form id="form1" runat="server"> 
    <div> 
    <input type="hidden" id="newname" runat="server" /> 
    <br /> 
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID_AM" DataSourceID="SqlDataSource1"> 
     <Columns> 
      <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" /> 
      <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
      <asp:BoundField DataField="StaffID" HeaderText="StaffID" SortExpression="StaffID" /> 
     </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
     SelectCommand="SELECT [ID], [Name], [StaffID] FROM [Record]"   
     ConflictDetection="CompareAllValues" 
     UpdateCommand="UPDATE [Record] SET [Name] = @Name, [StaffID] = @StaffID WHERE [ID] = @original_ID AND (([Name] = @original_Name) OR ([Name] IS NULL AND @original_Name IS NULL)) AND (([StaffID] = @original_StaffID) OR ([StaffID] IS NULL AND @original_StaffID IS NULL))"> 
     <UpdateParameters> 
      <asp:Parameter Name="Name" Type="String" /> 
      <asp:Parameter Name="StaffID" Type="String" /> 
      <asp:Parameter Name="original_ID" Type="Int32" /> 
      <asp:Parameter Name="original_Name" Type="String" /> 
      <asp:Parameter Name="original_StaffID" Type="String" /> 
     </UpdateParameters> 
    </asp:SqlDataSource> 
</div> 
</form> 

、プラグインは隠し入力「newname.value」に新しい名前とストアを生成します。この値をどのようにして更新パラメータに入れることができますか?

私が行うにはいくつかの方法を考えています:SQLパラメータは何とかその値

  • オーバーライド通常のSQL更新を使用してupdateコマンドを取るように
    • はいくつかの方法を探します。しかし、私は楽観的な並行処理機能を維持したい。
  • 答えて

    0

    ご回答ありがとうございます。後で私はもっと簡単な方法を見つける、簡単に思えて、私の場合のために働くようです。

    私はちょうど更新イベントにパラメータを追加します。

    Protected Sub SQL_Update(source As Object, e As SqlDataSourceCommandEventArgs) Handles SqlDataSource.Updating 
    
        dim staffid as string = newname.valie 
        // presudo for other passing values 
    
        e.Command.Parameters("@StaffID").Value = staffid 
        //and for other parameters 
    
    End Sub 
    

    はその後、SQL更新

    を実行する前に、これらのカスタムパラメータを追加することができます
    0

    あなたはasp.net webformsを使用しています。私は、あなたのasp.netコントロールを書かずに、クライアント側のjavascriptを使って、サーバー側のasp.netデータソースインターフェイスを作る(簡単な)方法はないと言います。 javascriptプラグインに基づいています。

    私が見つけた最も簡単な方法は、webmethodsを使用することでした。 Jqueryの使用を好む場合はlinkを参照してください。あなたはasp.netが重い持ち上げをする場合はthis linkを参照してください。私はリンク2を好むので、ここではジストです:

    まず、scriptManagerをページに追加する必要があります。このスクリプトマネージャは、JavaScriptを使ってサーバー側のWebメソッドへの非同期呼び出しを「書き込む」ことができます。あなたのaspxファイル:

    <head runat="server"> 
        <title></title> 
        <script type="text/javascript"> 
         function HandleIT() { 
          var name = document.getElementById('<%=txtname.ClientID %>').value; 
          var address = document.getElementById('<%=txtaddress.ClientID %>').value; 
          PageMethods.ProcessIT(name, address, onSucess, onError); 
          function onSucess(result) { 
           alert(result); 
          } 
          function onError(result) { 
           alert('Something wrong.'); 
          } 
         } 
        </script> 
    </head> 
    <div> 
         <p>Say bye-bey to Postbacks.</p> 
    
         <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager> 
         <asp:TextBox ID="txtname" runat="server"></asp:TextBox> 
         <br /> 
         <asp:TextBox ID="txtaddress" runat="server"></asp:TextBox> 
         <br /> 
         <asp:Button ID="btnCreateAccount" runat="server" Text="Signup" OnClientClick="HandleIT(); return false;" /> 
        </div> 
    

    そして、ここでは(これはあなたの.aspx.vbファイルになります)、WebMethod属性です:

    Imports System.Web.Services 
    <WebMethod> _ 
    Public Shared Function ProcessIT(name As String, address As String) As String 
        Dim result As String = (Convert.ToString((Convert.ToString("Welcome Mr. ") & name) + ". Your address is '") & address) + "'." 
        Return result 
    End Function 
    

    あなたは、各SQLクエリのWebMethod属性を作るそれでも私でしたそれらのSqlDataSourceオブジェクトを参照できるとは思わない別の方法でvb.netでデータを取得し、そのデータをWebメソッドから返す必要があります。

    WebMethodsはJSONを使用してオブジェクトを送受信します。つまり、JSONとの間でオブジェクトをシリアル化および逆シリアル化します。

    [{"ID": 6, "Name":"sec0ndHand","StaffId" : "employeeOfTheMonth1"},{"ID": 3, "Name":"Tomy","StaffId" : "notEmployeeOfTheMonth1"}] 
    

    をので、あなたのWebMethod属性は、この中のようになります。私はそれがJavaScriptに戻ることが最も互換性がわかったオブジェクト型は、ので、あなたのJSONは次のようになります)(文字列、オブジェクトの辞書()の)リストでした最後:

    <WebMethod> _ 
    Public Shared Function ProcessIT(name As String, address As String) As list(of dictionary(of string, object))) 
        Dim result As list(of dictionary(of string, object))) = New list(of dictionary(of string, object))) 
        'get/update/delete/insert your data 
    
        'convert your return object into list(of dictionary(of string, object))) 
        Return result 
    End Function 
    
    関連する問題