专栏首页跟着阿笨一起玩NETASP.NET 最佳DataGrid读取单元格的值

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设计窗口进行转换。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C# http Get/POST请求封装类

    http://www.sufeinet.com/thread-3-1-1.html

    跟着阿笨一起玩NET
  • .NET常用的扩展方法整理

    跟着阿笨一起玩NET
  • Div+CSS展示物流跟踪轨迹信息

    跟着阿笨一起玩NET
  • Rstudio中注释多行

    Rstudio是一个很不错的R语言的IDE(integrated development environment ,集成开发环境)。

    生信交流平台
  • 数组的运算+矩阵的运算

    近来有点忙于学新东西,时间不太够,所以到现在快将近一个月没更新了,感觉自己都要忘记还有这回事了,哈哈,不多说了,接上之前的篇章内容继续吧,如果有遗忘的,就去温故...

    狂人V
  • CentOS 7 :Failed to start IPv4 firewall with iptables.

    https://blog.csdn.net/u013028876/article/details/78750561

    拓荒者
  • 在 ASP.NET WebAPI 中使用 DataAnnotations 验证数据

    为了 Web 服务的安全, 通常在服务端也会做数据验证, 不过数据验证的代码确实是有点儿枯燥, 以简单的用户注册来说, 需要的注册信息如下:

    beginor
  • Java实现的一个编号生成器工具类——5种方法

    这个类可以直接用在项目开发中,直接上代码: import java.io.Serializable; import java.util.Random; impo...

    用户1289394
  • 全栈AI工程师指南,DIY一个识别手写数字的web应用

    本文从「全栈」的角度,通过训练模型、部署成后端服务、前端页面开发等内容的介绍,帮大家更快地把深度学习的模型应用到实际场景中。

    AI科技大本营
  • gitlab与pycharm结合

    超蛋lhy

扫码关注云+社区

领取腾讯云代金券