user1512593
user1512593

Reputation: 383

Right click Grid view

I wanted to know if there was a way to select a row and delete on right click from grid view.

I have the delete statement but I just dont have how to select on right click.

I've seen a couple suggestions that say to use mousebuttons.right but that doesnt work for me and errors with the (mousebuttons does not exist in current context)

here is my current fill statement

    protected void getGLDepts()
    {
            mpSearch.Focus();
            string[] mpvalue = mpSearch.Text.Split('(',')');
            string coa = "";
            string map = "";
            SqlConnection myconn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Rollup2ConnectionString"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = myconn;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "USP_GET_GL_BY_DEPT";
            cmd.Parameters.Add("@DEPTCODE", SqlDbType.Int).Value = mpvalue[1].ToString();
            foreach (ListItem item in mpcbl.Items)
            {
                if (item.Selected)
                {
                    coa += "','" + item.Value;
                }
            }
            if (coa != "") coa = coa.Substring(2, coa.Length - 2) + "'";
            else coa = "''";
            cmd.Parameters.Add("@COA", SqlDbType.VarChar).Value = coa;
            foreach (ListItem item in exceptdefault.Items)
            {
                if (item.Selected)
                {
                    map += "','" + item.Value;
                }
            }
            if (map != "") map = map.Substring(2, map.Length - 2) + "'";
            else coa = "''";
            cmd.Parameters.Add("@MAP", SqlDbType.VarChar).Value = map;

            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();

            try
            {
                da.Fill(ds);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    gvMapping.DataSource = ds;
                    gvMapping.DataBind();

                    lblGLDeptData.ForeColor = System.Drawing.Color.Black;
                    lblGLDeptData.Text = " " + ds.Tables[0].Rows.Count + " Cost Center/Funds are Mapped to this Department.";
                }
                else
                {
                    gvMapping.DataSource = ds;
                    gvMapping.DataBind();

                    lblGLDeptData.ForeColor = System.Drawing.Color.Black;
                    lblGLDeptData.Text = " No Currently Mapped Cost Centers.";
                }
            }
            catch (Exception ex)
            {
                lblGLDeptData.ForeColor = System.Drawing.Color.Red;
                lblGLDeptData.Text = ex.Message;
            }
            finally
            {
                myconn.Close();
                myconn.Dispose();
            }

my select row statement

    protected void gvSelect(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //e.Row.Cells[0].Style["display"] = "none";           
            e.Row.ToolTip = "Click to select row";
            e.Row.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(this.gvMapping, "Select$" + e.Row.RowIndex);            
        }
    }

and my delete statement

protected void delSysGLDepts(object sender, EventArgs e)
    {
        if (cbsys.Checked && !cbgl.Checked)
        {
            GridViewRow row = gvMapping.SelectedRow;
            SqlConnection myconn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Rollup2ConnectionString"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = myconn;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "USP_DELETE_SYS_ROW";
            cmd.Parameters.Add("@SYSID", SqlDbType.Int).Value = row.Cells[1].Text;

                myconn.Open();
                object count = cmd.ExecuteNonQuery();

                myconn.Close();
                myconn.Dispose();

                getSysDepts();

Upvotes: 0

Views: 1895

Answers (1)

IUnknown
IUnknown

Reputation: 22468

Works well for me:

void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes.Add("onContextMenu ", ClientScript.GetPostBackEventReference(GridView1, "Select$" + e.Row.RowIndex.ToString()) + "; return false;");
    }
}

protected override void Render(HtmlTextWriter writer)
{
    for (int index = 0; index < GridView1.Rows.Count; index++)
    {
        ClientScript.RegisterForEventValidation(GridView1.UniqueID, "Select$" + index.ToString());
    }

    base.Render(writer);
}

Upvotes: 1

Related Questions