Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法清除GridView的最后一个数据源_C#_Asp.net_Gridview - Fatal编程技术网

C# 无法清除GridView的最后一个数据源

C# 无法清除GridView的最后一个数据源,c#,asp.net,gridview,C#,Asp.net,Gridview,首先,我选择页面加载上的所有记录,如下所示: OleDbCommand objCmd = new OleDbCommand("SELECT * FROM MyTable", mycon); objCmd.CommandType = CommandType.Text; DataTable dtTemp = new DataTable(); OleDbDataReader rd = objCommand.ExecuteReader(); if (rd.HasRows) { dtTemp.Lo

首先,我选择页面加载上的所有记录,如下所示:

OleDbCommand objCmd = new OleDbCommand("SELECT * FROM MyTable", mycon);
objCmd.CommandType = CommandType.Text;
DataTable dtTemp = new DataTable();
OleDbDataReader rd = objCommand.ExecuteReader();
if (rd.HasRows)
{
    dtTemp.Load(rd);
    gvTemp.DataSource = dtTemp;
    gvTemp.DataBind();
}
<asp:TemplateField HeaderText="Action" ItemStyle-Width="80px">
    <ItemTemplate>
        <asp:LinkButton ID="lbtnStart" runat="server" CommandArgument='<%# Eval("MemID") %>' CommandName="Start">Start</asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>
OleDbCommand objCmd = new OleDbCommand("SELECT * FROM MyTable WHERE MemID = ?", mycon);
objCmd.Parameters.Add(myParam); 
objCmd.CommandType = CommandType.Text;
DataTable dtTemp = new DataTable();
OleDbDataReader rd = objCommand.ExecuteReader();
if (rd.HasRows)
{
    dtTemp.Load(rd);
    gvTemp.DataSource = dtTemp;
    gvTemp.DataBind();
}
gvTemp.DataSource = null;
gvTemp.DataBind();
gvTemp.DataSource = dtTemp;
gvTemp.DataBind();
if(!IsPostBack)
   //Your code or method for selecting all records.
在GridView(
gvTemp
)中,我在
CommandArgument
中传递
MemID
,如下所示:

OleDbCommand objCmd = new OleDbCommand("SELECT * FROM MyTable", mycon);
objCmd.CommandType = CommandType.Text;
DataTable dtTemp = new DataTable();
OleDbDataReader rd = objCommand.ExecuteReader();
if (rd.HasRows)
{
    dtTemp.Load(rd);
    gvTemp.DataSource = dtTemp;
    gvTemp.DataBind();
}
<asp:TemplateField HeaderText="Action" ItemStyle-Width="80px">
    <ItemTemplate>
        <asp:LinkButton ID="lbtnStart" runat="server" CommandArgument='<%# Eval("MemID") %>' CommandName="Start">Start</asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>
OleDbCommand objCmd = new OleDbCommand("SELECT * FROM MyTable WHERE MemID = ?", mycon);
objCmd.Parameters.Add(myParam); 
objCmd.CommandType = CommandType.Text;
DataTable dtTemp = new DataTable();
OleDbDataReader rd = objCommand.ExecuteReader();
if (rd.HasRows)
{
    dtTemp.Load(rd);
    gvTemp.DataSource = dtTemp;
    gvTemp.DataBind();
}
gvTemp.DataSource = null;
gvTemp.DataBind();
gvTemp.DataSource = dtTemp;
gvTemp.DataBind();
if(!IsPostBack)
   //Your code or method for selecting all records.
这工作做得很好。但问题就在这里。
当用户搜索特定记录时,我重新加载
gvTemp
,如下所示:

OleDbCommand objCmd = new OleDbCommand("SELECT * FROM MyTable", mycon);
objCmd.CommandType = CommandType.Text;
DataTable dtTemp = new DataTable();
OleDbDataReader rd = objCommand.ExecuteReader();
if (rd.HasRows)
{
    dtTemp.Load(rd);
    gvTemp.DataSource = dtTemp;
    gvTemp.DataBind();
}
<asp:TemplateField HeaderText="Action" ItemStyle-Width="80px">
    <ItemTemplate>
        <asp:LinkButton ID="lbtnStart" runat="server" CommandArgument='<%# Eval("MemID") %>' CommandName="Start">Start</asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>
OleDbCommand objCmd = new OleDbCommand("SELECT * FROM MyTable WHERE MemID = ?", mycon);
objCmd.Parameters.Add(myParam); 
objCmd.CommandType = CommandType.Text;
DataTable dtTemp = new DataTable();
OleDbDataReader rd = objCommand.ExecuteReader();
if (rd.HasRows)
{
    dtTemp.Load(rd);
    gvTemp.DataSource = dtTemp;
    gvTemp.DataBind();
}
gvTemp.DataSource = null;
gvTemp.DataBind();
gvTemp.DataSource = dtTemp;
gvTemp.DataBind();
if(!IsPostBack)
   //Your code or method for selecting all records.
执行此查询时,我只得到一条记录。当我点击
Start
,就会触发
gvTemp\u RowCommand
。但是我得到了旧数据源的
e.CommandArgument
。(即
SELECT*FROM MyTable
的前1个
MemID
)。因此,在绑定实际数据源之前,我清除GridView,如下所示:

OleDbCommand objCmd = new OleDbCommand("SELECT * FROM MyTable", mycon);
objCmd.CommandType = CommandType.Text;
DataTable dtTemp = new DataTable();
OleDbDataReader rd = objCommand.ExecuteReader();
if (rd.HasRows)
{
    dtTemp.Load(rd);
    gvTemp.DataSource = dtTemp;
    gvTemp.DataBind();
}
<asp:TemplateField HeaderText="Action" ItemStyle-Width="80px">
    <ItemTemplate>
        <asp:LinkButton ID="lbtnStart" runat="server" CommandArgument='<%# Eval("MemID") %>' CommandName="Start">Start</asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>
OleDbCommand objCmd = new OleDbCommand("SELECT * FROM MyTable WHERE MemID = ?", mycon);
objCmd.Parameters.Add(myParam); 
objCmd.CommandType = CommandType.Text;
DataTable dtTemp = new DataTable();
OleDbDataReader rd = objCommand.ExecuteReader();
if (rd.HasRows)
{
    dtTemp.Load(rd);
    gvTemp.DataSource = dtTemp;
    gvTemp.DataBind();
}
gvTemp.DataSource = null;
gvTemp.DataBind();
gvTemp.DataSource = dtTemp;
gvTemp.DataBind();
if(!IsPostBack)
   //Your code or method for selecting all records.

但我仍然得到了旧数据源的
e.CommandArgument
。那么我错过了什么?或者是否有其他方法可以实现同样的效果?

在每次单击按钮时,都会发生回发和页面加载事件,因此在您的情况下,这可能是加载上一个数据源的原因。因此,您必须检查iPostBack条件

试着这样做:

OleDbCommand objCmd = new OleDbCommand("SELECT * FROM MyTable", mycon);
objCmd.CommandType = CommandType.Text;
DataTable dtTemp = new DataTable();
OleDbDataReader rd = objCommand.ExecuteReader();
if (rd.HasRows)
{
    dtTemp.Load(rd);
    gvTemp.DataSource = dtTemp;
    gvTemp.DataBind();
}
<asp:TemplateField HeaderText="Action" ItemStyle-Width="80px">
    <ItemTemplate>
        <asp:LinkButton ID="lbtnStart" runat="server" CommandArgument='<%# Eval("MemID") %>' CommandName="Start">Start</asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>
OleDbCommand objCmd = new OleDbCommand("SELECT * FROM MyTable WHERE MemID = ?", mycon);
objCmd.Parameters.Add(myParam); 
objCmd.CommandType = CommandType.Text;
DataTable dtTemp = new DataTable();
OleDbDataReader rd = objCommand.ExecuteReader();
if (rd.HasRows)
{
    dtTemp.Load(rd);
    gvTemp.DataSource = dtTemp;
    gvTemp.DataBind();
}
gvTemp.DataSource = null;
gvTemp.DataBind();
gvTemp.DataSource = dtTemp;
gvTemp.DataBind();
if(!IsPostBack)
   //Your code or method for selecting all records.

为什么不简单地删除
响应。重定向(自身)
并使用方法和属性

private string MemID{
    get { return (String)ViewState["MemID"]; }
    set { ViewState["MemID"] = value; }
}

private void BindGrid()
{
    // copy your sql,datasource and databind stuff here, use the MemID property for the parameter
}

protected void gvTemp_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Start")
    {
        MemID = e.CommandArgument.ToString());
        BindGrid();
    }
}

您传入的
objCmd.Parameters.Add(myParam)的
myParam
的值是多少?尝试刷新()或。重置绑定可能会影响它solve@prashanth我从方法参数中获取它的值。@GyanChandraSrivastava不是
Refresh()
ResetBinding()
DataGridView
的方法。我这里有
GridView
。实际上,
AddMem.aspx
是另一个页面。我要通过的位置
MemID