公司项目开发过程中遇到的问题总结!
Datagrid中使用模板列嵌套radiobutton出现不可单选的问题,在网上找了很多方式,但是除了自写控件和html控件外没有其他的解决方案。
考虑只为一个页面专门来添加一个usercontrole有点浪费,所以,记录一下个人的解决方案。
问题:由于radiobutton在生成时会变成自动设置groupname,所以这里出现了不能单选的问题。
解决思路:后台代码,通过查询datagrid的行号找到radiobutton控件,然后再判定当前的checked值。
前台代码:
代码
后台代码:
代码
1 public int CurrentSType
2 {
3 get { return (int)ViewState["SType"]; }
4 set { value = (int)ViewState["SType"]; }
5 }
6
7 public int CurrentTemID
8 {
9 get { return (int)ViewState["STID"]; }
10 set { value = (int)ViewState["STID"]; }
11 }
12
13 protected void Page_Load(object sender, EventArgs e)
14 {
15 if (!Page.IsPostBack)
16 {
17 ViewState["SType"] = GetCurrSType();
18 ViewState["STID"] = GetCurrSTID();
19 BindData();
20 Check();
21 }
22 }
23
24 private int GetCurrSType()
25 {
26 StringBuilder strSql = new StringBuilder();
27 strSql.Append("SELECT F4_T300 FROM T_300 ");
28 strSql.Append("INNER JOIN T_019 ON F50_T019=OID_T300 ");
29 strSql.Append("WHERE F99_T019=1 AND F99_T300=1 AND OID_T019=");
30 strSql.Append(SupplierId.ToString());
31
32 return Convert.ToInt32(Bizproud.DataAccess.SqlHelper.ExecuteScalar(Bizproud.DataAccess.SqlHelper.connStr, CommandType.Text, strSql.ToString(), new SqlParameter[] { }));
33 }
34 private int GetCurrSTID()
35 {
36 StringBuilder strSql = new StringBuilder();
37 strSql.Append("SELECT F50_T019 FROM T_019 ");
38 strSql.Append("WHERE F99_t019=1 AND OID_T019=");
39 strSql.Append(SupplierId.ToString());
40
41 return
42 (int)
43 Bizproud.DataAccess.SqlHelper.ExecuteScalar(Bizproud.DataAccess.SqlHelper.connStr, CommandType.Text,
44 strSql.ToString(), new SqlParameter[] { });
45 }
46 private void BindData()
47 {
48 Bizproud.BLL.T_300BLL t300bll = new Bizproud.BLL.T_300BLL();
49 dlTemplate.DataKeyField = "OID_T300";
50 StringBuilder strSql = new StringBuilder();
51 strSql.Append("SELECT OID_T300,F1_T300,F3_T300,F1_T134 ");
52 strSql.Append("FROM T_300 ");
53 strSql.Append("INNER JOIN T_134 ON T_300.F4_T300=T_134.OID_T134 ");
54 strSql.Append("WHERE F4_T300=" + CurrentSType);
55
56 dlTemplate.DataSource = t300bll.GetListBySql(strSql.ToString());
57 dlTemplate.DataBind();
58
59
60 }
61
62 private void Check()
63 {
64 for (int i = 0; i < dlTemplate.Items.Count; i++)
65 {
66 RadioButton rbtnTemplate = (RadioButton)dlTemplate.Items[i].FindControl("rbtnTemplate");
67 HiddenField hfTemplate300ID = (HiddenField)dlTemplate.Items[i].FindControl("hfTemplate300ID");
68
69 if (Convert.ToInt32(hfTemplate300ID.Value) == CurrentTemID)
70 {
71 rbtnTemplate.Checked = true;
72 }
73 else
74 {
75 rbtnTemplate.Checked = false;
76 }
77 }
78 }
79
80 protected void rbtnTemplate_CheckedChanged(object sender, EventArgs e)
81 {
82 RadioButton rbtnTemplate = (RadioButton)sender;
83
84 int rowIndex = Convert.ToInt32(rbtnTemplate.GroupName);
85 Bizproud.BLL.T_019BLL t019bll = new Bizproud.BLL.T_019BLL();
86
87 for (int i = 0; i < dlTemplate.Items.Count; i++)
88 {
89 if (rowIndex == i)
90 {
91 rbtnTemplate.Checked = true;
92
93 t019bll.Update(SupplierId, Convert.ToInt32(((HiddenField)dlTemplate.Items[i].FindControl("hfTemplate300ID")).Value));
94 Bizproud.Common.Alert.Show(this, "模板保存成功...");
95 }
96 else
97 {
98 ((RadioButton)dlTemplate.Items[i].FindControl("rbtnTemplate")).Checked = false;
99 }
100 }
101 }
2 {
3 get { return (int)ViewState["SType"]; }
4 set { value = (int)ViewState["SType"]; }
5 }
6
7 public int CurrentTemID
8 {
9 get { return (int)ViewState["STID"]; }
10 set { value = (int)ViewState["STID"]; }
11 }
12
13 protected void Page_Load(object sender, EventArgs e)
14 {
15 if (!Page.IsPostBack)
16 {
17 ViewState["SType"] = GetCurrSType();
18 ViewState["STID"] = GetCurrSTID();
19 BindData();
20 Check();
21 }
22 }
23
24 private int GetCurrSType()
25 {
26 StringBuilder strSql = new StringBuilder();
27 strSql.Append("SELECT F4_T300 FROM T_300 ");
28 strSql.Append("INNER JOIN T_019 ON F50_T019=OID_T300 ");
29 strSql.Append("WHERE F99_T019=1 AND F99_T300=1 AND OID_T019=");
30 strSql.Append(SupplierId.ToString());
31
32 return Convert.ToInt32(Bizproud.DataAccess.SqlHelper.ExecuteScalar(Bizproud.DataAccess.SqlHelper.connStr, CommandType.Text, strSql.ToString(), new SqlParameter[] { }));
33 }
34 private int GetCurrSTID()
35 {
36 StringBuilder strSql = new StringBuilder();
37 strSql.Append("SELECT F50_T019 FROM T_019 ");
38 strSql.Append("WHERE F99_t019=1 AND OID_T019=");
39 strSql.Append(SupplierId.ToString());
40
41 return
42 (int)
43 Bizproud.DataAccess.SqlHelper.ExecuteScalar(Bizproud.DataAccess.SqlHelper.connStr, CommandType.Text,
44 strSql.ToString(), new SqlParameter[] { });
45 }
46 private void BindData()
47 {
48 Bizproud.BLL.T_300BLL t300bll = new Bizproud.BLL.T_300BLL();
49 dlTemplate.DataKeyField = "OID_T300";
50 StringBuilder strSql = new StringBuilder();
51 strSql.Append("SELECT OID_T300,F1_T300,F3_T300,F1_T134 ");
52 strSql.Append("FROM T_300 ");
53 strSql.Append("INNER JOIN T_134 ON T_300.F4_T300=T_134.OID_T134 ");
54 strSql.Append("WHERE F4_T300=" + CurrentSType);
55
56 dlTemplate.DataSource = t300bll.GetListBySql(strSql.ToString());
57 dlTemplate.DataBind();
58
59
60 }
61
62 private void Check()
63 {
64 for (int i = 0; i < dlTemplate.Items.Count; i++)
65 {
66 RadioButton rbtnTemplate = (RadioButton)dlTemplate.Items[i].FindControl("rbtnTemplate");
67 HiddenField hfTemplate300ID = (HiddenField)dlTemplate.Items[i].FindControl("hfTemplate300ID");
68
69 if (Convert.ToInt32(hfTemplate300ID.Value) == CurrentTemID)
70 {
71 rbtnTemplate.Checked = true;
72 }
73 else
74 {
75 rbtnTemplate.Checked = false;
76 }
77 }
78 }
79
80 protected void rbtnTemplate_CheckedChanged(object sender, EventArgs e)
81 {
82 RadioButton rbtnTemplate = (RadioButton)sender;
83
84 int rowIndex = Convert.ToInt32(rbtnTemplate.GroupName);
85 Bizproud.BLL.T_019BLL t019bll = new Bizproud.BLL.T_019BLL();
86
87 for (int i = 0; i < dlTemplate.Items.Count; i++)
88 {
89 if (rowIndex == i)
90 {
91 rbtnTemplate.Checked = true;
92
93 t019bll.Update(SupplierId, Convert.ToInt32(((HiddenField)dlTemplate.Items[i].FindControl("hfTemplate300ID")).Value));
94 Bizproud.Common.Alert.Show(this, "模板保存成功...");
95 }
96 else
97 {
98 ((RadioButton)dlTemplate.Items[i].FindControl("rbtnTemplate")).Checked = false;
99 }
100 }
101 }