2013-04-06 115 views
2

我在asp.net中使用GridView。我想选择一个数据行。我在属性面板中查找了MultiSelect和SelectionMode,但找不到它。Asp.net GridView启用行选择

那么如何启用在GridView中选择行?

谢谢。

enter image description here 代码后面

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的代码

<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> 
+0

请在aspx页面上发布gridview代码。 – 2013-04-06 04:35:54

+0

在'GridView1_SelectedIndexChanged'上使用断点来检查事件是否正在启动。 – 2013-04-06 04:42:49

+0

为什么它没有MultiSelect和SingleSelection属性? – chathura 2013-04-06 04:45:31

回答

-1

在GridView中,你必须定义一个事件onselectedindexchangedonrowdatabound如下:

onselectedindexchanged="GridView1_SelectedIndexChanged" onrowdatabound="GridView1_RowDataBound" 

显示所选行,你可以在你的网格视图中使用以下样式:

<SelectedRowStyle BackColor="Red" /> 

代码背后:

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

备注:您可以在事件窗口中找到事件。

+0

让我知道,如果它可以帮助你。 – 2013-04-06 04:16:17

+0

我没有在GridView1_SelectedIndexChanged中编写任何代码。它仍然不起作用。有任何想法吗?? – chathura 2013-04-06 04:18:27

+0

请发布您的代码。 gridview和后面的代码。 – 2013-04-06 04:23:00

0

我认为MultiSelect和SelectionMode属性只适用于VB.NET网格,不适用于ASP.NET。请记住,ASP.NET中的所有控件都是HTML伪装的,因此它们可能会更有限。你没有理由不能有多选表,但你必须自己做管道。所以,你需要启用行选择,要么通过处理RowDataBound事件在

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

或其他使用MS提供的选项,如

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

然后,你需要处理SelectedIndexChanging事件,找出用户点击了哪一行,并处理自己的行着色。