在asp.net中使用SqlDataSource更新gridview

2023-11-30

我想使用 gridview 更新记录SqlDataSource,这就是我正在做的事情。
下面是我的 gridview 标记

<asp:GridView ID="grdManageFaculties" runat="server" AllowPaging="True" AutoGenerateColumns="False"
        DataSourceID="LocalServerDataSource" AutoGenerateDeleteButton="true" AutoGenerateEditButton="true"
        Width="100%" OnRowUpdating="grdManageFaculties_RowUpdating">
        <Columns>
            <asp:TemplateField HeaderText="MANAGE">
                <ItemTemplate>
                    <asp:LinkButton ID="lnkEdit" runat="server" CommandName="Edit" Text="Edit"></asp:LinkButton>
                    <asp:LinkButton ID="lnkDelete" runat="server" Text="Delete"></asp:LinkButton>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:LinkButton ID="lnkUpdate" runat="server" Text="Update"></asp:LinkButton>
                    <asp:LinkButton ID="lnkCancel" runat="server" Text="Cancel"></asp:LinkButton>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="NAME">
                <ItemTemplate>
                    <asp:Label ID="lblUserName" runat="server" Text='<%# Eval("UserName") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:Label ID="lblEditUserName" runat="server" Text='<%# Eval("UserName") %>'></asp:Label>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="EMAIL">
                <ItemTemplate>
                    <asp:Label ID="lblEmail" runat="server" Text='<%# Eval("Email") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtEditEmail" runat="server" Text='<%# Bind("Email") %>'></asp:TextBox>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="MOBILE">
                <ItemTemplate>
                    <asp:Label ID="lblMobileNumber" runat="server" Text='<%# Eval("Mobile") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtEditMobileNumber" runat="server" Text='<%# Bind("Mobile") %>'></asp:TextBox>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="LOCKED">
                <ItemTemplate>
                    <asp:CheckBox ID="chkIsLocked" runat="server" Enabled="false" Checked='<%# Eval("Locked") %>' />
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:CheckBox ID="chkEditIsLocked" runat="server" Checked='<%# Bind("Locked") %>' />
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="CREATED">
                <ItemTemplate>
                    <asp:Label ID="lblCreated" runat="server" Text='<%# Eval("Created") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:Label ID="lblEditCreated" runat="server" Text='<%# Eval("Created") %>'></asp:Label>
                </EditItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

下面是我的 SqlDataSource 标记

<asp:SqlDataSource ID="LocalServerDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:SiteSqlServer %>"
        SelectCommand="users_GetAllUsers" SelectCommandType="StoredProcedure" UpdateCommand="users_UpdateFaculty" UpdateCommandType="StoredProcedure">
        <UpdateParameters>
            <asp:Parameter Name="EMAIL" Type="String" />
            <asp:Parameter Name="ISLOCKEDOUT" Type="Boolean" />
            <asp:Parameter Name="MOBILENUMBER" Type="Int64" />
            <asp:Parameter Name="USERNAME" Type="String" />
        </UpdateParameters>
    </asp:SqlDataSource>

下面是我的 Row_Updating 函数的隐藏代码

   protected void grdManageFaculties_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        try
        {
            TextBox email = grdManageFaculties.Rows[e.RowIndex].FindControl("txtEditEmail") as TextBox;
            Label username = grdManageFaculties.Rows[e.RowIndex].FindControl("lblEditUserName") as Label;
            CheckBox locked = grdManageFaculties.Rows[e.RowIndex].FindControl("chkEditIsLocked") as CheckBox;
            TextBox mobilenumber = grdManageFaculties.Rows[e.RowIndex].FindControl("txtEditMobileNumber") as TextBox;

            LocalServerDataSource.UpdateParameters["EMAIL"].DefaultValue = email.Text;
            LocalServerDataSource.UpdateParameters["ISLOCKEDOUT"].DefaultValue = locked.Checked.ToString();
            LocalServerDataSource.UpdateParameters["MOBILENUMBER"].DefaultValue = mobilenumber.Text;
            LocalServerDataSource.UpdateParameters["USERNAME"].DefaultValue = username.Text;
            LocalServerDataSource.Update();
        }
        catch { }
    }

下面是我的更新存储过程

ALTER PROCEDURE users_UpdateFaculty
    @EMAIL NVARCHAR(100),
    @ISLOCKEDOUT BIT,
    @MOBILENUMBER BIGINT,
    @USERNAME nvarchar(100)
AS
BEGIN
    UPDATE aspnet_Users SET MOBILENUMBER=@MOBILENUMBER where USERNAME=@USERNAME
    UPDATE ASPNET_MEMBERSHIP SET EMAIL = @EMAIL, LOWEREDEMAIL = LOWER(@EMAIL), ISLOCKEDOUT=@ISLOCKEDOUT WHERE USERID = (SELECT USERID FROM ASPNET_USERS WHERE USERNAME=@USERNAME)
END

我在数据库中的记录正在更新,但是当我单击更新按钮时,出现以下错误:

Procedure or function users_UpdateFaculty has too many arguments specified.

任何人都可以帮助我可能导致此问题的原因,我正在正确使用所有参数。


找到了解决方案: 选择列和更新参数应该匹配才能使用 SqlDataSource 进行更新,这意味着如果您选择(查询或过程)在 gridview 中返回 3 个字段,那么它们都应该是更新的参数,您可能会错过如果不需要的话,数据库中的实际更新,但是<UpdateParameters>应该包含所有字段:例如,如果下面是我的选择查询

SELECT USERNAME, MOBILENUMBER, EMAIL FROM USERS

那么更新参数应该是

<UpdateParameters>
   <asp:Parameter Name="UserName" Type="String" />
   <asp:Parameter Name="MobileNumber" Type="Int64" />
   <asp:Parameter Name="Email" Type="String" />
<UpdateParameters>

您不能跳过任何参数,即使您不打算更新该字段 希望这对其他人有帮助,因为我浪费了很多时间对此进行研究。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在asp.net中使用SqlDataSource更新gridview 的相关文章

随机推荐

  • SQL SERVER 2008 JOIN 提示

    最近 我正在尝试优化这个查询 UPDATE Analytics SET UserID x UserID FROM Analytics z INNER JOIN UserDetail x ON x UserGUID z UserGUID 估计
  • 在 Word 2010 标题中插入文本和字段而不使用 .Select

    我正在尝试修复 Word 2010 页面标题 其中包含文件名 保存日期和页码字段以及每个字段之间的一些文本 如下所示 文件名 保存日期 选项卡 页码 但是 我似乎无法将琴弦放在正确的位置 到目前为止我所拥有的是这样的 Sub CreateH
  • 限制每个节点的 Pod 数量

    我正在尝试限制集群中每个节点的 Pod 数量 我设法使用配置文件从 kubeadm init 添加每个节点的全局限制 apiVersion kubeadm k8s io v1beta1 kind ClusterConfiguration n
  • 旋转字典的值

    输入 34 apple 65 ball 32 cat 78 dog 输出 34 dog 65 apple 32 ball 78 cat 我提出了以下方法 但是有没有更快的方法来执行此任务 def rotate values my dict
  • 如何从 SPARQL 查询访问土地注册处住宅类型

    我正在尝试使用 SPARQL 查询从英国土地登记处检索住宅类型 API 显示它被称为 属性类型 并显示有四种类型 独立式 公寓式 半独立式 联排式 API在这里 http landregistry data gov uk def commo
  • 在推送 GitHub 期间从命令行使用 SSH 密钥?

    我在 GitHub 上存档了现有的 SSH 密钥 我正在尝试将更改推送到其他人的 GitHub 项目 我有合作者访问该帐户 系统提示我输入密码 git push warning push default is unset its impli
  • 在 Rust 中,不匹配的arm是否会在“match”语句中获取变量的所有者?

    我是 Rust 新手 下面是我的测试 derive Debug enum Food Cake Pizza Salad derive Debug struct Bag food Food fn main let bag Bag food Fo
  • 自动从网站按钮单击每日下载 csv 文件

    我想自动化访问网站 单击按钮和保存文件的过程 在此站点上下载文件的唯一方法是单击按钮 您无法使用 url 导航到该文件 我一直在尝试使用 phantomjs 和 casperjs 来自动化这个过程 但没有取得任何成功 我最近尝试在这里使用布
  • 在 iPhone OS 4.0 上从相机获取曝光值

    拍照时可以获取相机的曝光值 无需将其保存到 SavedPhotos A光度计iPhone 上的应用程序可能通过使用一些私有 API 来执行此操作 该应用程序仅在 iPhone 3GS 上执行此操作 因此我猜测它可能与创建图像时填充此信息的
  • Django get_or_create 在导入 CSV 时返回 models.DoesNotExist

    我花了很长时间才弄清楚这一点 我只是尝试使用 Python 的 csv 模块和 Django 的 get or create 导入 CSV 文件 这是我的简单代码 基于this code import csv from models imp
  • 如何将包含指数数的字符串转换为十进制并返回字符串

    我正在 delphi 和 c 之间转换代码 值作为字符串存储在 delphi 应用程序的文本文件中 存储值的示例为 4 42615029219009E 5 现在 在我的 C 应用程序中 我需要读入该字符串值 然后能够再次写出该值 最初我使用
  • BlackBerry touchEvent 外部字段触发 fieldChanged

    我遇到一个问题 如果我按下 触摸某个字段之外fieldChanged 具有焦点的字段会触发事件 我的布局MainScreen非常简单 就像这样 public class myMainScreen extends MainScreen imp
  • 使用Python抓取谷歌搜索结果标题和网址

    我正在使用 Python 3 7 开发一个项目 其中我需要抓取标题和 URL 的前几个 Google 结果 我已经使用 BeautifulSoup 尝试过 但它不起作用 这是我尝试过的 import requests from my fak
  • Python:通过加窗的高通 FIR 滤波器

    我想通过 Python 中的窗口创建一个基本的高通 FIR 滤波器 我的代码在下面 并且是故意惯用的 我知道你 很可能 可以用 Python 中的一行代码来完成这个 但我正在学习 我使用了带有矩形窗口的基本 a sinc 函数 我的输出适用
  • 如何清除字符串文字池中的条目[重复]

    这个问题在这里已经有答案了 可能的重复 String intern 的垃圾收集行为 Java 如何存储字符串以及子字符串内部如何工作 根据我的说法 声明为 null 时的 String 引用不会从字符串文字池中删除该条目 我想知道如何清除它
  • 将登录表单与 scrapy 一起使用

    scrapy框架 https github com scrapy scrapy 提供了一个库 供登录需要身份验证的网站时使用 https github com scrapy loginform 我已经浏览了这两个程序的文档 但是我似乎无法弄
  • 在 Kext 中链接 Dylib?

    我为 OS X 编写了一个 kext 它使用 IOKit libusb 和 jpeglib 实现了基于 USB 的帧缓冲区 这两个都是 dylib 由于某种原因 它们无法在 XCode 中正确链接 并且操作系统在尝试加载 kext 时不会解
  • Bokeh 中数据表中的点击选择图表

    我从其他来源获取了以下代码 这不是我自己的代码 该代码允许您在数据表中选择一个单元格 该单元格的 下载 数据将根据所选单元格的行绘制图表 如何扩展此代码 以便如果我有多个变量 例如 下载 和 上传 以及数据表中的更多列 我可以根据该单元格绘
  • 将序列重置为特定值

    我们正在创建现有数据库的 空白 最小副本 并希望将其中一个序列重置为一个值 将数字放在下面是可行的 但我想在导出中的序列具有更高的数字时使其可重用 试图避免删除和重新创建 您可以执行相当于子选择和计算的操作来获取值 还是需要将其设置为第一个
  • 在asp.net中使用SqlDataSource更新gridview

    我想使用 gridview 更新记录SqlDataSource 这就是我正在做的事情 下面是我的 gridview 标记