C# 获取整行可单击网格视图的值并在文本框中显示

C# 获取整行可单击网格视图的值并在文本框中显示,c#,sql,asp.net,gridview,C#,Sql,Asp.net,Gridview,我有一个gridview,它从存储过程加载数据 目标: 要通过在gridview中隐藏select列使完整的gridview行可单击,我可以通过在RowDataBound事件中执行下面的代码来做到这一点 接下来,当我在gridview中单击一整行时,我应该能够从所选行中获取数据/值,并将其显示在模式弹出窗口中的文本框中。这是用于更新/编辑功能 这是我得到的 protected void grdTenant_RowDataBound(object sender, GridViewRowEvent

我有一个gridview,它从存储过程加载数据

目标:

要通过在gridview中隐藏select列使完整的gridview行可单击,我可以通过在RowDataBound事件中执行下面的代码来做到这一点

接下来,当我在gridview中单击一整行时,我应该能够从所选行中获取数据/值,并将其显示在模式弹出窗口中的文本框中。这是用于更新/编辑功能

这是我得到的

 protected void grdTenant_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        e.Row.Cells[0].Style["display"] = "none";

        if (e.Row.RowType == DataControlRowType.DataRow)
        { 

            e.Row.Attributes["onmouseover"] =
                "javascript:setMouseOverColor(this);";
            e.Row.Attributes["onmouseout"] =
                "javascript:setMouseOutColor(this);";
            e.Row.Attributes["onclick"] =
            Page.ClientScript.GetPostBackClientHyperlink
                (this.grdTenant, "Select$" + e.Row.RowIndex);
            e.Row.Attributes.Add("onclick", String.Format("javascript:$find('{0}').show();",ModalEditTenant.ClientID ));

//this line does not work in retrieving row data
   IDataRecord dataRow = (IDataRecord)e.Row.DataItem;
        txtRPCode.Text = Convert.ToString(dataRow["Retail Partner"]);

        }
    }
作为替代方案,我这样做是为了实现第二个目标,但第一个目标没有实现

  protected void grdTenant_SelectedIndexChanged(object sender, EventArgs e)
    {
        GridViewRow row = grdTenant.SelectedRow;
        txtRPCode.Text  = row.Cells[1].Text;

        ModalEditTenant.Show();
    }
但是,此方法仅在“选择按钮”列可见时有效,单击该列时,在选择整行时无法执行此操作

如何在select列隐藏的情况下使整行select并将数据检索到文本框

这就是gridview如何绑定存储过程数据源中的数据

     System.Threading.Thread.Sleep(500);
            //DropDownList ddl = (DropDownList)sender;

            SqlCommand cmd = new SqlCommand("spTenantList", con);
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@Location", ddlSelectLoc.SelectedValue );


            try
            {
                con.Open();
                grdTenant.EmptyDataText = "No Records Found";
                grdTenant.DataSource = cmd.ExecuteReader();
                grdTenant.DataBind();


            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
                con.Dispose();
            }
使用FindControl方法

放置文本框ID,而不是TXT

在RowDataBound事件中使用下面的我的逻辑来获取DataItem:


我已经根据要实现的目标找到了答案。使用我当前发布的代码作为问题,只需删除那里的单行代码,它就会工作

受保护的void grdTenant_RowDataBoundobject发送方,GridViewRowEventArgs e { e、 行。单元格[0]。样式[显示]=无

    if (e.Row.RowType == DataControlRowType.DataRow)
    { 

        e.Row.Attributes["onmouseover"] =
            "javascript:setMouseOverColor(this);";
        e.Row.Attributes["onmouseout"] =
            "javascript:setMouseOutColor(this);";
        e.Row.Attributes["onclick"] =
        Page.ClientScript.GetPostBackClientHyperlink
            (this.grdTenant, "Select$" + e.Row.RowIndex);        
    }
}
此行已删除:

//这将不再需要,因为它将使onselectedindexchanged事件无效,因为它将首先运行

e、 Row.Attributes.Addonclick,String.Formatjavascript:$find'{0}'。show;,modaledittentenant.ClientID


所有操作都将按预期进行。

执行此操作后,我出现了此错误-对象引用未设置为对象的实例。您的TextBox名称是什么?您是否替换了上面一行中的名称并重试了?是的,我将txtRetailPartner替换为实际TextBox的名称,即txtRPCode。txtRPCode在gridview中?您选择了哪个值ng是否从gridview获取文本框?不,gridview中没有定义边界字段或模板字段,先生。请在您的问题中添加gridviewid.datasource绑定代码?我已更新了我的问题不是.aspx文件代码,我需要C代码将数据绑定到gridview中。例如:grdtenat.datasource=XYZ;grdtenat.DataBinding;…等等,您是我们吗正在使用datatable绑定网格?我已经再次更新了它,正如我前面所说,我正在使用存储过程在gridview中加载一些数据,在我的下拉列表中,当用户选择一项时,gridview将根据选择自动加载数据不使用try{}catchException ex{throw ex;}。它所做的只是打乱堆栈跟踪,使其看起来像是从抛出点发出的异常。我在代码中的onclick部分之后包含了您的代码,它给了我以下错误:错误3'System.Web.UI.WebControl.GridViewRowEventArgs'不包含'Item'的定义,并且没有接受的第一个参数的扩展方法'Item'可以找到类型“System.Web.UI.WebControl.GridViewRowEventArgs”是否缺少using指令或程序集引用?是的,它位于GridView列数据所在的弹出窗口中,是否要在txtRPCode文本框中显示?能否给我列的索引,如第1列、第2列等???实际上GridView中的所有列任务是在模式弹出窗口中移动或显示,因为它们用于更新/编辑功能,为了使问题更简单,我在gridview中给出了第一列,它是根据存储过程的列的零售合作伙伴代码名,并且将在模式弹出窗口扩展器的txtRPCode文本框中交付。在当前cas中e、 项目未被接受是否缺少程序集或命名空间?txtRPCode是第一列具体说明并回答您的问题。
protected void grdTenant_RowDataBound(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[0].Style["display"] = "none";

    if (e.Row.RowType == DataControlRowType.DataRow)
    { 
         IDataRecord dataRow = (IDataRecord)e.Row.DataItem;
         txtRPCode.Text = Convert.ToString(dataRow["Retail Partner Code"]);
    }
}
    if (e.Row.RowType == DataControlRowType.DataRow)
    { 

        e.Row.Attributes["onmouseover"] =
            "javascript:setMouseOverColor(this);";
        e.Row.Attributes["onmouseout"] =
            "javascript:setMouseOutColor(this);";
        e.Row.Attributes["onclick"] =
        Page.ClientScript.GetPostBackClientHyperlink
            (this.grdTenant, "Select$" + e.Row.RowIndex);        
    }
}
protected void grdTenant_SelectedIndexChanged(object sender, EventArgs e)
    {
        GridViewRow row = grdTenant.SelectedRow;
        txtRPCode.Text  = row.Cells[1].Text;

        ModalEditTenant.Show();
    }