1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Web.UI.HtmlControls; 8 using System.Web.UI.WebControls.WebParts; 9 using citd_BHwebmanage.Wechat; 10 using citd_BHwebmanage.Data; 11 using System.Data; 12 using System.Data.SqlClient; 13 14 namespace citd_BHwebmanage.views 15 { 16 public partial class wEarlyStregy1 : System.Web.UI.Page 17 { 18 protected void Page_Load(object sender, EventArgs e) 19 { 20 if(!IsPostBack) 21 { 22 BindData(); 23 } 24 else 25 { 26 27 } 28 } 29 30 private void BindData() 31 { 32 List<Monitor_send_list> objmsl = new List<Monitor_send_list>(); 33 objmsl = MonitorsendlistOper.SelectMsl(); 34 this.GridView1.DataKeyNames = new string[] { "MonitorsendID" }; 35 36 this.GridView1.DataSource = objmsl; 37 38 this.GridView1.DataBind(); 39 } 40 41 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 42 { 43 if (e.Row.RowType == DataControlRowType.DataRow) 44 { 45 if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate) 46 { 47 try 48 { 49 Label t = e.Row.FindControl("lbMonitorsendrauth") as Label; 50 string rst = "未知"; 51 52 if ((e.Row.DataItem as Monitor_send_list).Monitorsendrauth == 0) 53 rst = "否"; 54 if ((e.Row.DataItem as Monitor_send_list).Monitorsendrauth == 1) 55 rst = "是"; 56 57 t.Text = rst; 58 } 59 catch (Exception err) 60 { 61 ClientScript.RegisterStartupScript(typeof(Page), "err", "alert('加载读取列表错误:" + err.Message + "');", true); 62 } 63 //Label lbBridgename = e.Row.FindControl("lbBridgename") as Label; 64 //if(lbBridgename != null) 65 //{ 66 67 //} 68 } 69 if (e.Row.RowState == DataControlRowState.Edit || e.Row.RowState == (DataControlRowState.Alternate | DataControlRowState.Edit)) 70 { 71 } 72 } 73 74 75 } 76 77 protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 78 { 79 GridView1.EditIndex = e.NewEditIndex; 80 BindData(); 81 82 } 83 //所属大桥下拉列表 84 public List<Bridge_Info> GetDs() 85 { 86 var bridge = BridgeInfoOper.GetBridgeInfoList().ToList(); 87 var list = bridge.AsQueryable().Select(p => p.Bridgename).ToList<string>(); 88 return bridge; 89 } 90 //监测项下拉列表 91 public List<Calc_TypeInfo> GetCt() 92 { 93 List<Calc_TypeInfo> obj = new List<Calc_TypeInfo>(); 94 obj = CalcTypeInfoOper.SelectALLCTI(); 95 return obj.ToList(); 96 } 97 //间隔时间下拉列表 98 public List<Active_time> GetAct() 99 { 100 List<Active_time> act = new List<Active_time>(); 101 act = MonitorsendlistOper.SelectAct(); 102 return act; 103 } 104 //是否允许用户修改 105 public List<string> GetMr() 106 { 107 List<string> strlist = new List<string>(); 108 strlist.Add("是"); 109 strlist.Add("否"); 110 return strlist; 111 112 } 113 //取消 114 protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 115 { 116 GridView1.EditIndex = -1; 117 BindData(); 118 } 119 //删除一行 120 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 121 { 122 string id = GridView1.DataKeys[e.RowIndex][0].ToString(); 123 MonitorsendlistOper.DelmslByID(id); 124 BindData(); 125 } 126 127 //新增按钮 128 protected void btnAdd_Click(object sender, EventArgs e) 129 { 130 List<Monitor_send_list> objmsl = new List<Monitor_send_list>(); 131 objmsl = MonitorsendlistOper.SelectMsl(); 132 Monitor_send_list mslnew = new Monitor_send_list(); 133 string nid = Guid.NewGuid().ToString(); 134 mslnew.MonitorsendID = nid; 135 objmsl.Add(mslnew); 136 this.GridView1.DataSource = objmsl; 137 this.GridView1.DataKeyNames = new string[] { "MonitorsendID" }; 138 this.GridView1.EditIndex = objmsl.Count() - 1; 139 this.GridView1.DataBind(); 140 } 141 142 143 144 145 146 /// <summary> 147 /// 获取新增或编辑后的对象 148 /// </summary> 149 /// <param name="id">对象ID主键</param> 150 /// <param name="rowindex">所处的行号</param> 151 /// <returns></returns> 152 public Monitor_send_list GetMslObj(string id,int rowindex) 153 { 154 try 155 { 156 157 Monitor_send_list mslobj = new Monitor_send_list(); 158 mslobj.MonitorsendID = id; 159 string sssidd = GridView1.DataKeys[rowindex].ToString(); 160 161 DropDownList ddlBridge = (DropDownList)GridView1.SelectedRow.FindControl("lbbridgename"); 162 mslobj.BridgeID = ddlBridge.SelectedValue.ToString(); 163 mslobj.Bridgename = ddlBridge.SelectedItem.Text; 164 165 DropDownList ddlCalcType = (DropDownList)GridView1.Rows[rowindex].FindControl("ddlCalcTypeName"); 166 mslobj.CalcTypeID = ddlCalcType.SelectedValue.ToString(); 167 mslobj.CalcTypeName = ddlCalcType.SelectedItem.Text; 168 169 DropDownList ddlActiveID = (DropDownList)GridView1.Rows[rowindex].FindControl("ddlActiveID"); 170 mslobj.ActiveID = ddlActiveID.SelectedItem.Text; 171 172 mslobj.Monitorsendnumber = Convert.ToInt16(((TextBox)GridView1.Rows[rowindex].FindControl("tbMonitorsendnumber")).Text); 173 174 DropDownList ddlMonitorsendrauth = (DropDownList)GridView1.Rows[rowindex].FindControl("ddlMonitorsendrauth"); 175 mslobj.Monitorsendrauth = Convert.ToInt16(ddlMonitorsendrauth.SelectedValue); 176 return mslobj; 177 } 178 catch (Exception ex) 179 { 180 throw ex; 181 } 182 183 } 184 185 protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e) 186 { 187 //BindData(); 188 } 189 190 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 191 { 192 try 193 { 194 Monitor_send_list mslobj = new Monitor_send_list(); 195 string id = GridView1.DataKeys[e.RowIndex].Value.ToString(); 196 int rowindex = e.RowIndex; 197 mslobj.MonitorsendID = id; 198 this.GridView1.SelectRow(rowindex); 199 200 DropDownList ddlbridgename = this.GridView1.Rows[e.RowIndex].FindControl("ddlbridgename") as DropDownList;//(DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlCalcTypeName"); 201 mslobj.BridgeID = ddlbridgename.SelectedValue.ToString(); 202 mslobj.Bridgename = ddlbridgename.SelectedItem.Text; 203 204 205 DropDownList ddlCalcType = this.GridView1.Rows[e.RowIndex].FindControl("ddlCalcTypeName") as DropDownList;//(DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlCalcTypeName"); 206 mslobj.CalcTypeID = ddlCalcType.SelectedValue.ToString(); 207 mslobj.CalcTypeName = ddlCalcType.SelectedItem.Text; 208 209 DropDownList ddlActiveID = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlActiveID"); 210 mslobj.ActiveID = ddlActiveID.SelectedItem.Text; 211 212 mslobj.Monitorsendnumber = Convert.ToInt16(((TextBox)GridView1.Rows[e.RowIndex].FindControl("tbMonitorsendnumber")).Text); 213 214 DropDownList ddlMonitorsendrauth = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlMonitorsendrauth"); 215 mslobj.Monitorsendrauth = Convert.ToInt16(ddlMonitorsendrauth.SelectedValue); 216 217 MonitorsendlistOper.UpdatemslByObj(mslobj); 218 GridView1.EditIndex = -1; 219 BindData(); 220 } 221 catch (Exception ex) 222 { 223 throw ex; 224 } 225 226 } 227 228 229 230 } 231 }
以下是页面主要代码
<div id="grv"> <asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound" OnRowEditing="GridView1_RowEditing" AutoGenerateColumns="False" OnRowCancelingEdit="GridView1_RowCancelingEdit" AllowCustomPaging="True" AllowPaging="True" CssClass="gridview" OnRowDeleting="GridView1_RowDeleting" DataKeyNames="MonitorsendID" EnableViewState="False" OnRowUpdated="GridView1_RowUpdated" OnRowUpdating="GridView1_RowUpdating"> <Columns> <asp:TemplateField> <HeaderTemplate>MID</HeaderTemplate> <ItemTemplate> <%#Eval("MonitorsendID") %> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderTemplate>BID</HeaderTemplate> <ItemTemplate> <%#Eval("BridgeID") %> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderTemplate>序号</HeaderTemplate> <ItemTemplate><%#Container.DataItemIndex+1%></ItemTemplate> </asp:TemplateField> <asp:TemplateField ItemStyle-HorizontalAlign="Center"> <HeaderTemplate>所属大桥</HeaderTemplate> <ItemTemplate> <asp:Label runat="server" ID="lbbridgename" Text='<%#Eval("Bridgename") %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="ddlbridgename" runat="server" DataSource='<%#GetDs() %>' DataTextField="Bridgename" DataValueField="BridgeID"></asp:DropDownList> <%--DataSource='<%#GetDs() %>' DataTextField="Bridgename" DataValueField="BridgeID"--%> </EditItemTemplate> <ItemStyle HorizontalAlign="Center"></ItemStyle> </asp:TemplateField> <asp:TemplateField> <HeaderTemplate>CID</HeaderTemplate> <ItemTemplate> <%#Eval("CalcTypeID") %> </ItemTemplate> </asp:TemplateField> <%--<asp:BoundField DataField="CalcTypeID" HeaderText="CID" ReadOnly="True" Visible="true" />--%> <asp:TemplateField> <HeaderTemplate>监测项</HeaderTemplate> <ItemTemplate> <asp:Label runat="server" ID="lbCalcTypeName" Text='<%#Eval("CalcTypeName") %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="ddlCalcTypeName" runat="server" DataSource='<%#GetCt() %>' DataTextField="Name" DataValueField="ID"></asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderTemplate>间隔时间</HeaderTemplate> <ItemTemplate> <asp:Label runat="server" ID="lbActiveID" Text='<%#Eval("ActiveID") %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="ddlActiveID" runat="server"> <asp:ListItem>1 h</asp:ListItem> <asp:ListItem>1 day</asp:ListItem> <asp:ListItem>1 week</asp:ListItem> <asp:ListItem>1 month</asp:ListItem> <asp:ListItem>1 year</asp:ListItem> </asp:DropDownList> <%--DataSource='<%#GetAct() %>' DataTextField="ActiveUnit" DataValueField="ActiveID">--%> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderTemplate>最多发送条数</HeaderTemplate> <ItemTemplate> <%#Eval("Monitorsendnumber") %> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="tbMonitorsendnumber" runat="server" Text='<%# Bind("Monitorsendnumber") %>'></asp:TextBox> <%--<asp:TextBox ID="txtdName" runat="server" Text='<%# Bind("dName") %>'></asp:TextBox>--%> </EditItemTemplate> </asp:TemplateField> <%--<asp:BoundField DataField="Monitorsendnumber" HeaderText="最多发送条数" ReadOnly="false" Visible="true" HeaderStyle-HorizontalAlign="Center"> </asp:BoundField>--%> <asp:TemplateField> <HeaderTemplate>是否允许用户修改</HeaderTemplate> <ItemTemplate> <asp:Label runat="server" ID="lbMonitorsendrauth" Text='<%#Eval("Monitorsendrauth") %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="ddlMonitorsendrauth" runat="server" DataTextField="name" DataValueField="id"> <%--DataSource='<%#GetMr() %>' DataTextField="Monitorsendrauth" DataValueField="Monitorsendrauth">--%> <asp:ListItem Value=0>否</asp:ListItem> <asp:ListItem Value=1>是</asp:ListItem> </asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:CommandField ShowEditButton="True" HeaderText="操作" CausesValidation="false" /> <asp:CommandField ShowDeleteButton="True" HeaderText="操作" /> </Columns> </asp:GridView> </div>
如题调试在200行一直报索引超出范围,gridview自带的删除没问题,点击就删掉了,就是更新一直不行
1.DropDownList ddlbridgename = this.GridView1.Rows[e.RowIndex].Cells[3].FindControl("ddlbridgename") as DropDownList;
2.DropDownList ddlbridgename = this.GridView1.Rows[e.RowIndex].FindControl("ddlbridgename") as DropDownList;
折两种写法都试过了
需要DropDownList ddlbridgename = this.GridView1.Rows[e.RowIndex-1].FindControl("ddlbridgename") as DropDownList吗?
string dididi = ((DropDownList)this.GridView1.Rows[e.RowIndex].FindControl("ddlbridgename")).SelectedValue.ToString();
写成这样,也报同样的错