ASP.NET 最佳DataGrid读取单元格的值
采用asp:BoundColumn列
前台:

<asp:BoundColumn DataField="UserID" HeaderText="工号">
后台:

foreach (DataGridItem item in dataGrid.Items) { string userID = item.Cells[1].Text; }
这样的弊端就是如果列的索引发生变化,就导致读取不到对应的列所对应的单元格值。
最佳方法应该采用asp:TemplateColumn模板列的方式
参考:http://blog.csdn.net/aiouwen521/article/details/8490742
前台:

<asp:TemplateColumn> <ItemTemplate> <asp:TextBox Runat="server" ID="txtID" Text='<%# DataBinder.Eval(Container.DataItem,"au_id") %>'> </asp:TextBox> </ItemTemplate> </asp:TemplateColumn>
后台:

读取DataGrid控件TextBox值 foreach(DataGrid dgi in yourDataGrid.Items) { TextBox tb = (TextBox)dgi.FindControl("yourTextBoxId"); tb.Text.... }
针对TemplateColumn 优雅写法:

List<RollLeaveDetailCom> rollLeaveDetailComList = new List<RollLeaveDetailCom>(); foreach (DataGridItem item in this.gridDetails.Items) { RollLeaveDetailCom leaveDetailCom = new RollLeaveDetailCom(); leaveDetailCom.StartDate = Convert.ToDateTime(item.ValueOf("txtStartDate")); leaveDetailCom.StartTime = item.ValueOf("txtStartTime"); leaveDetailCom.EndDate = Convert.ToDateTime(item.ValueOf("txtEndDate")); leaveDetailCom.EndTime = item.ValueOf("txtEndTime"); leaveDetailCom.TotalDay = item.ValueOf("txtTotalTime").Replace("天", "").ToInt(); leaveDetailCom.SalaryDay = item.ValueOf("txtSalaryTime").Replace("天", "").ToInt(); rollLeaveDetailComList.Add(leaveDetailCom); } return rollLeaveDetailComList; /// <summary> /// 扩展 DataGridItem, 取其内部控件的值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="item"></param> /// <param name="ctrlId"></param> /// <returns></returns> public static string ValueOf(this DataGridItem item, string ctrlId) { if (item == null || string.IsNullOrEmpty(ctrlId)) return string.Empty; Control ctrl = item.FindControl(ctrlId); string result = string.Empty; if (ctrl is TextBox) result = (ctrl as TextBox).Text; else if (ctrl is HyperLink) result = (ctrl as HyperLink).Text; else if (ctrl is LinkButton) result = (ctrl as LinkButton).Text; else if (ctrl is HiddenField) result = (ctrl as HiddenField).Value; else if (ctrl is DropDownList) result = (ctrl as DropDownList).SelectedValue; return result; }
注意:BoundColumn列转换为TemplateColumn 可以通过DataGrid的属性编辑器可视化UI设计窗口进行转换。
作者:阿笨
【官方QQ一群:跟着阿笨一起玩NET(已满)】:422315558
【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616
【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586
【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:829227829
【官方QQ五群:.NET Core跨平台开发技术(可加入)】:647639415
【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628
【51CTO学院】:https://edu.51cto.com/sd/66c64
【微信公众号】:微信搜索:跟着阿笨一起玩NET