'Asp.net GridView Enabling row selection

I am using GridView in asp.net. I want to select a single data row. I looked for MultiSelect and SelectionMode in property panel, but I can't find it.

So how to enable selecting rows in GridView?

Thanks.

enter image description here Code Behind

public partial class SearchCourse : System.Web.UI.Page
{
Connection dbCon;
DataTable tbl;

protected void Page_Load(object sender, EventArgs e)
{
    dbCon = new Connection();


}
protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
{
    if (RadioButton1.Checked) {
        txtSubName.Enabled = true;
        comboSemester.Enabled = false;
        comboYear.Enabled = false;
        comboProgram.Enabled =false;
        txtSubName.Text = "";
    }
}
protected void RadioButton2_CheckedChanged(object sender, EventArgs e)
{
    if (RadioButton2.Checked) {

        comboProgram.Enabled = true;

        if (comboProgram.SelectedItem.ToString() == "Foundation Course")
        {
            comboSemester.Enabled = false;
            comboYear.Enabled = false;
        }
        else {
            comboSemester.Enabled = true;
            comboYear.Enabled = true;
        }
        txtSubName.Text = "";
        txtSubName.Enabled = false;
    }
}

protected void imgBtnSearch_Click(object sender, ImageClickEventArgs e)
{
    if (RadioButton1.Checked) {
        String name = txtSubName.Text;
        tbl = dbCon.getResultsBySubjectName(name);
        GridView1.DataSource = tbl;
        GridView1.DataBind();
    }
    else if (RadioButton2.Checked)
    {
        String program = comboProgram.SelectedItem.ToString();
        String year = comboYear.SelectedItem.ToString();
        String sem= comboSemester.SelectedItem.ToString();
        tbl = dbCon.getResultsByProgram(program,year,sem);
        GridView1.DataSource = tbl;
        GridView1.DataBind();
    }
    else if (RadioButton3.Checked)
        {
            String name = txtSubName.Text;
            tbl = dbCon.getResultsBySubjectNo(name);
            GridView1.DataSource = tbl;
            GridView1.DataBind();
        }

}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    String program = comboProgram.SelectedItem.ToString();
    String year, sem;
    if (program == "Foundation Course")
    {
        comboYear.Enabled = false;
        comboSemester.Enabled = false;
        year = null;
        sem = null;
    }
    else {
        comboYear.Enabled = true;
        comboSemester.Enabled = true;
        year = comboYear.SelectedItem.ToString();
        sem = comboSemester.SelectedItem.ToString();
    }

    tbl = dbCon.getResultsByProgram(program, year, sem);
    GridView1.DataSource = tbl;
    GridView1.DataBind();
}

protected void comboYear_SelectedIndexChanged(object sender, EventArgs e)
{
    String program = comboProgram.SelectedItem.ToString();
    String year = comboYear.SelectedItem.ToString();
    String sem = comboSemester.SelectedItem.ToString();
    tbl = dbCon.getResultsByProgram(program, year, sem);
    GridView1.DataSource = tbl;
    GridView1.DataBind();
}
protected void comboSemester_SelectedIndexChanged(object sender, EventArgs e)
{
    String program = comboProgram.SelectedItem.ToString();
    String year = comboYear.SelectedItem.ToString();
    String sem = comboSemester.SelectedItem.ToString();
    tbl = dbCon.getResultsByProgram(program, year, sem);
    GridView1.DataSource = tbl;
    GridView1.DataBind();

}



protected void RadioButton3_CheckedChanged(object sender, EventArgs e)
{
    if (RadioButton3.Checked)
    {
        txtSubName.Enabled = true;
        comboSemester.Enabled = false;
        comboYear.Enabled = false;
        comboProgram.Enabled = false;
        txtSubName.Text = "";
    }
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{

}

}

GridView Code

<asp:GridView ID="GridView1" CssClass="grid" runat="server" AllowPaging="True" 
BorderColor="Black" BorderStyle="Solid" BorderWidth="2px" 
GridLines="Horizontal"  EnableViewState="False" 
PageSize="5"   onselectedindexchanged="GridView1_SelectedIndexChanged" >

<RowStyle CssClass="gridRow" Width="800px" />

<SelectedRowStyle BackColor="#FF0066" ForeColor="White" />

</asp:GridView> 


Solution 1:[1]

I think the MultiSelect and SelectionMode properties are only available with the VB.NET grid, not in ASP.NET. Bear in mind that all controls in ASP.NET are HTML-in-disguise, so they may be more limited. There is no reason why you can't have a multi-select table, but you have to do the plumbing yourself. So you need to enable row selection, either by handling the RowDataBound event as in

http://forums.asp.net/t/992062.aspx?How+to+select+row+in+gridview+on+click

or else using the MS-provided option as in

http://msdn.microsoft.com/en-us/library/wbk82279(v=vs.100).aspx

Then you need to handle the SelectedIndexChanging event, figure out which row the user clicked on, and handle the row-colouring yourself.

Solution 2:[2]

In gridview you have to define an event onselectedindexchanged and onrowdatabound as below:

onselectedindexchanged="GridView1_SelectedIndexChanged"  onrowdatabound="GridView1_RowDataBound"  

to show the selected row you can use following style in your grid view:

 <SelectedRowStyle BackColor="Red" />

in code behind:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{

if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // Set the hand mouse cursor for the selected row.
        e.Row.Attributes.Add("OnMouseOver", "this.style.cursor = 'hand';");

        // The seelctButton exists for ensuring the selection functionality
        // and bind it with the appropriate event hanlder.
        LinkButton selectButton = new LinkButton()
        {
            CommandName = "Select",
            Text = e.Row.Cells[0].Text
        };
        selectButton.Font.Underline = false;
        selectButton.ForeColor = Color.Black;

        e.Row.Cells[0].Controls.Add(selectButton);
        //e.Row.Attributes["OnClick"] =
        //     Page.ClientScript.GetPostBackClientHyperlink(selectButton, "");
        e.Row.Attributes["onclick"] =         ClientScript.GetPostBackClientHyperlink(this.GridView1, "Select$" + e.Row.RowIndex);
    }
    }

note: you can find the event in event window.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 DJDave
Solution 2