Bonjour, j'ai un grand problème, ça fait une journée que cherche sur le net mais malheureusement sans résultat. Je souhaite ajouter à mon gridview un bouton radio à chaque ligne.
- Mon grid est contenu dans une webpart dans le code utilisé est uniquement c#.
- Je dois gérer le post back quand je sélectionne un radio.
- Je dois sélectionner une seule ligne comme en HTML en spécifiant le nom, mais avec asp.net c'est pas faisable.
Le code de la webpart :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102 using System; using System.Runtime.InteropServices; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Serialization; using System.Data; using Microsoft.SharePoint; using Microsoft.SharePoint.WebControls; using Microsoft.SharePoint.WebPartPages; namespace ProjetSPGridView { class RadioButtonTemplateField : ITemplate { private DataControlRowType templateType; private string columnName; private SPGridView grid; public RadioButtonTemplateField(DataControlRowType type, string colname,SPGridView grid) { templateType = type; columnName = colname; this.grid = grid; } void ITemplate.InstantiateIn(Control container) { switch (templateType) { case DataControlRowType.Header: Literal lc = new Literal(); lc.Text = columnName; container.Controls.Add(lc); break; case DataControlRowType.DataRow: RadioButton rb = new RadioButton(); rb.AutoPostBack = true; rb.ID = "rb1"; rb.EnableViewState = true; //DataTable dt = (DataTable)grid.DataSource; //rb.Text = DataBinder.Eval(container.i; rb.DataBinding += delegate(object sender, EventArgs e) { GridViewRow row = (GridViewRow)rb.NamingContainer; int ID = (int)DataBinder.Eval(row.DataItem, "ID"); ((RadioButton)sender).Text = ID.ToString(); }; rb.CheckedChanged += new EventHandler(rb_CheckedChanged); //LiteralControl c = new LiteralControl("radio"); //c.ID = "radio"; //c.Controls.Add(rb); //rb.Text = "radio"; //rb.Items.Add("aa"); //rb.SelectedIndex = 0; //rb.DataValueField=DataBinder.Eval(container.data //container.Controls.Add(rb); container.Controls.Add(rb); break; default: break; } } void rb_CheckedChanged(object sender, EventArgs e) { ((Page)sender).Response.Write("<script>bonjour</script>"); RadioButton rb = new RadioButton(); rb = (RadioButton)sender; string str = rb.Text; SPGridView grid = (SPGridView)sender; RadioButton rbgrid; for (int i = 0; i < grid.Rows.Count; i++) { rbgrid = (RadioButton)grid.Rows[i].FindControl("rb1"); rbgrid.Checked = false; if (str == rbgrid.Text) { rbgrid.Checked = true; ((Page)sender).Session["nomCheck"] = rbgrid.Text; } } } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 protected override void CreateChildControls() { base.CreateChildControls(); GetData(); oView.Table = datatable; oGrid.ID = "UserGrid"; oGrid.DataSource = oView; oGrid.AutoGenerateColumns = false; oGrid.RowDataBound +=new GridViewRowEventHandler(oGrid_RowDataBound); //oGrid.RowDataBound += new EventHandler(oGrid_DataBound); oGrid.AllowSorting = true; oGrid.RowCreated += new GridViewRowEventHandler(oGrid_RowCreated); oGrid.SelectedIndexChanged += new EventHandler(oGrid_SelectedIndexChanged); oGrid.SelectedIndexChanging += new GridViewSelectEventHandler(oGrid_SelectedIndexChanging); oGrid.CssClass = "ms-listviewtable"; oGrid.AlternatingRowStyle.CssClass = "ms-alternating"; oGrid.Width = new Unit(50, UnitType.Percentage); oGrid.GridLines = GridLines.None; oGrid.HeaderStyle.Font.Bold = true; oGrid.HeaderStyle.HorizontalAlign = HorizontalAlign.Left; BoundField colTitle; for (int i = 0; i < datatable.Columns.Count; i++) { colTitle = new BoundField(); colTitle.DataField = datatable.Columns[i].ColumnName; colTitle.HeaderText = datatable.Columns[i].ColumnName; colTitle.SortExpression = datatable.Columns[i].ColumnName; this.oGrid.Columns.Add(colTitle); } TemplateField customField = new TemplateField(); customField.ShowHeader = true; customField.HeaderTemplate = new RadioButtonTemplateField(DataControlRowType.Header, "", oGrid); customField.ItemTemplate = new RadioButtonTemplateField(DataControlRowType.DataRow, " ", oGrid); oGrid.Columns.Add(customField); this.Controls.Add(oGrid); } void oGrid_RowCreated(object sender, GridViewRowEventArgs e) { //SPGridViewRow row = (SPGridViewRow)sender; //if(oGrid.Rows[0]==row) //{ // RadioButton rbtnl = (RadioButton)e.Row.FindControl("rb1"); // rbtnl.Checked = true; // } DataRowView drv = e.Row.DataItem as DataRowView; if (e.Row.RowType == DataControlRowType.DataRow) { RadioButton rbtnl = (RadioButton)e.Row.FindControl("rb1"); if (rbtnl.Text.Equals(Page.Session["nomCheck"])) rbtnl.Checked = true; } } void oGrid_SelectedIndexChanging(object sender, GridViewSelectEventArgs e) { Page.Response.Write("<script>e.NewSelectedIndex</script>") ; } void oGrid_SelectedIndexChanged(object sender, EventArgs e) { } protected void oGrid_RowDataBound(object sender, GridViewRowEventArgs e) { DataRowView drv = e.Row.DataItem as DataRowView; if (e.Row.RowType == DataControlRowType.DataRow) { RadioButton rbtnl = (RadioButton)e.Row.FindControl("rb1"); if (rbtnl.Text.Equals(Page.Session["nomCheck"])) rbtnl.Checked = true; } }
Partager