2017-01-11 1 views
0

Я использую Gridview с помощью команды Select/Insert/Update SQLDataSource. Он отлично работает для обновления или изменения значения с помощью Gridview. Однако недавно я добавил еще один плагин, который использует Javascript для извлечения данных, и мне нужно, чтобы данные были исходными данными SQL. Как я могу это сделать?VB.net - Пропустить пользовательский параметр в команде обновления SQL

Что-то вроде этого:

<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> 

Когда я использую Gridview для обновления строки, плагин будет генерировать новое имя и хранить в скрытом ввода «newname.value». Как я могу поместить это значение в параметр обновления?

Я имею в виду несколько способов сделать:

  • найти способ, так что SQL параметр будет каким-то образом принять это значение
  • Override команда обновления с помощью обычного обновления SQL. Но я хочу сохранить оптимистичную функцию параллелизма.

ответ

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 datasource с клиентским интерфейсом javascript, не создавая собственный элемент управления asp.net основанный на плагине javascript.

Это, как говорится, самый простой способ, которым я нашел, - использовать web-методы. Если вы предпочитаете использовать JQuery, см. Это link. Если вы хотите, чтобы asp.net выполнял тяжелый подъем, см. this link. Я предпочитаю ссылку 2, так что вот смещение:

Во-первых, вам нужно будет добавить scriptManager на свою страницу, которая будет «писать» функции javascript для асинхронных вызовов на серверные веб-методы, это будет файл 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> 

а вот WebMethod, (это будет в файле .aspx.vb):

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 

Вы могли бы сделать WebMethod для каждого запроса SQL, но даже тогда я не думайте, что вы можете ссылаться на эти объекты SqlDataSource. Вам нужно будет использовать другой способ вытащить данные с помощью vb.net, а затем вернуть эти данные из веб-метода.

Webmethods использует JSON для отправки и получения объектов, что означает, что они сериализуют и десериализуют объекты в JSON и из них. Тип объекта я обнаружил, что был наиболее совместимым, чтобы вернуться Javascript был список (из словаря (строк, объект))) так что ваш JSON будет выглядеть следующим образом:

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

так что ваш веб-метод будет выглядеть примерно так в конец:

<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 
Смежные вопросы