在文本框中获取全行可点击网格视图和显示的值

时间:2015-04-16 09:49:30

标签: c# sql asp.net gridview

我有一个gridview,可以从存储过程中加载数据。

目的:

  1. 通过隐藏gridview中的select列来使完整的gridview行可单击 - 我可以通过在RowDataBound事件中执行以下代码来完成此操作。

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

  3. 这是我的所得

     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();
        }
    

    但是,此方法仅在选择按钮列可见且单击时才有效,当选择完整行时,它无法执行此操作。

    如何成功选择完整行并将数据检索到文本框(隐藏选择列)


    这就是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();
                }
    

3 个答案:

答案 0 :(得分:1)

使用FindControl()方法。

而不是txtRetailPartner放置您的TextBox ID

txtRPCode.Text = ((TextBox)e.Row.FindControl("txtRetailPartner")).Text;

答案 1 :(得分:1)

RowDataBound事件中使用我的逻辑来获取DataItem

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"]);
    }
}

答案 2 :(得分:0)

我根据要实现的目标找到答案。使用当前发布的代码作为问题,只需删除那里的一行代码即可使用

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);        
    }
}

此行已删除:

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

e.Row.Attributes.Add(" onclick",String.Format(" javascript:$ find(' {0}')。show ();",ModalEditTenant.ClientID));

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

        ModalEditTenant.Show();
    }

一切都会按预期工作。