执行SQL SELECT查询并在单击按钮时在GridView中显示结果

本文关键字:GridView 结果 显示 按钮 单击 SQL SELECT 查询 执行 | 更新日期: 2023-09-27 18:07:51

上下文:我正在设计一个简单的ASP。. NET网页,我有一个搜索框,用户可以在其中输入用户ID (int),当他们单击搜索按钮时,GridView控件显示SQL SELECT查询的结果,该查询检查是否存在具有指定用户ID的条目。这些功能都可以工作,而且我相信相当简单。

我添加了另一个按钮,我想执行一个不同的SQL SELECT查询,返回表中的所有条目。

这是第一个SELECT查询,是GridView使用的SqlDataSource的SelectCommand: SELECT * FROM [tblUser] WHERE [UserID] = @UserID

下面是我想在用户单击新按钮时执行的新的SELECT查询:SELECT * FROM tblUser

问题:我如何使用"OnClick"事件(在后面的代码)来执行这个新的查询并在同一个GridView中显示结果?

我尝试过的:这似乎是执行新语句的一种非常合乎逻辑的方式:改变GridView控件使用的SqlDataSource的SelectCommand,执行SelectCommand,然后在GridView中显示该命令的结果。不幸的是,它只是导致一个空的GridView,没有列标签或任何东西。

    string selectAll = "SELECT * FROM tblUser";        //new query to execute
    string oldSelect = SqlDataSource1.SelectCommand;    //stores old query in temp variable
    SqlDataSource1.SelectCommand = selectAll;           //sets the SelectCommand of the DataSource to the new query
    SqlDataSource1.Select(DataSourceSelectArguments.Empty);    //executes the SelectCommand
    GridView1.DataBind();                              //binds the GridView to the DataSource
    SqlDataSource1.SelectCommand = oldSelect;          //returns the select command to its original value

执行SQL SELECT查询并在单击按钮时在GridView中显示结果

问题是您忘记在更改SelectCommand后将DataSource和DataSourceID分配给GridView:

        string selectAll = "SELECT * FROM tblUser";        //new query to execute
        string oldSelect = SqlDataSource1.SelectCommand;    //stores old query in temp variable
        SqlDataSource1.SelectCommand = selectAll;           //sets the SelectCommand of the DataSource to the new query
        SqlDataSource1.Select(DataSourceSelectArguments.Empty);    //executes the SelectCommand
        GridView1.DataSourceID = "";
        GridView1.DataSource = SqlDataSource1;
        GridView1.DataBind();                              //binds the GridView to the DataSource
        SqlDataSource1.SelectCommand = oldSelect;   

回到原来的选择,在不同的按钮点击事件:

SqlDataSource1.Select(DataSourceSelectArguments.Empty);    //executes the SelectCommand
        GridView1.DataSourceID = "";
        GridView1.DataSource = SqlDataSource1;
        GridView1.DataBind(); 

EDIT

考虑到你使用实体框架,

在后台代码:

Public Shared Function getUsers(optional byval userid as integer = 0) as list(of myusers)
    Using db as new your_user_entity
        dim users = (from u in db.Users select u)
            if userid = 0 then
                return users.toList()
            else
                return users.where(function (x) x.userid = userid).toList()
        End If
    End Using
End 

之后,你可以调用这个函数在一个按钮点击:

gridview.datasource = getUsers() ' will give you all users
gridview.databind

在另一个按钮上:

gridview.datasource = getUsers(10) ' will only give you the user with id=10
girdview.databind

稍微改变你的逻辑。在后面的代码中,创建两个函数

  1. getSingleUserDetails
  2. getAllUsers

两个函数都应该返回List(of Your_user)

then in button click events for both button,

。btnGetSingle_Click

gridview.datasource = getSingleUserDetails(10)
gridview.databind

btnGetAllUsers_Click

gridview.datasource = getAllUsers
gridview.databind

注意:我省略了一些事实,比如你可以使用重载函数,实体框架等。

我必须这样做:

1)在改变SelectCommand后,指定GridView的DataSource和DataSourceID。

2)在执行新的SelectCommand之前删除搜索文本框的SelectParameter,然后在进行常规搜索之前将其添加回来。

这是我的代码为我的按钮点击事件为"显示全部"按钮:

    protected void ShowAllUsers(object sender, EventArgs e)
{
    UserIDTextBox.Text = "";
    SqlDataSource1.SelectCommand = selectAll;
    SqlDataSource1.SelectParameters.Remove(SqlDataSource1.SelectParameters["UserID"]);
    GridView1.DataSourceID = "";
    GridView1.DataSource = SqlDataSource1;
    GridView1.DataBind();
    SqlDataSource1.SelectCommand = selectUser;        
}

常规搜索按钮:

        if (SqlDataSource1.SelectParameters.Count == 0)
        {
            SqlDataSource1.SelectParameters.Add("UserID", UserIDTextBox.Text);
        }
        SqlDataSource1.SelectCommand = selectUser;

selectUserselectAll是保存SQL查询的字符串。