热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DataGrid/Gridview中的按钮反选事件与NamingContainer(命名容器)

DataGrid中想实现这样的效果:根据某一字段列的值动态改变按钮的文本,比如:点击按钮列,自动更新某列原为0的值为1&#x

DataGrid中想实现这样的效果:
根据某一字段列的值动态改变按钮的文本,比如:
点击按钮列,自动更新某列原为0的值为1,并将按钮列的文本改为“置0”,
再按下,自动更新某列原为1的值为0,并将按钮列的文本改为“置1”,

最终通过NamingContainer,实现! 方法如下 :


<asp:DataGrid id&#61;"DataGrid1" runat&#61;"server" AutoGenerateColumns&#61;"False">
                
<Columns>
                    
<asp:BoundColumn DataField&#61;"HonoreeID" HeaderText&#61;"ID">asp:BoundColumn>
                    
<asp:BoundColumn DataField&#61;"status" HeaderText&#61;"状态">
                        
<HeaderStyle Width&#61;"300px">HeaderStyle>
                    
asp:BoundColumn>
                    
<asp:TemplateColumn HeaderText&#61;"状态是否为0">
                        
<HeaderStyle HorizontalAlign&#61;"Center" Width&#61;"10%">HeaderStyle>
                        
<ItemStyle HorizontalAlign&#61;"Center">ItemStyle>
                        
<ItemTemplate>
                            
<asp:Label id&#61;"lb" runat&#61;"server" Visible&#61;"false" Text&#61;&#39;<%# ((DataBinder.Eval(Container, "DataItem.status", "{0}"))&#61;&#61;"0")?"是":"color&#61;red>font>" %>&#39;>
                            
asp:Label>
                            
<asp:Button ID&#61;"changeState" Runat&#61;"server" Text&#61;&#39;<%# ((DataBinder.Eval(Container, "DataItem.status", "{0}"))&#61;&#61;"0")?"转为1":"转为0" %>&#39;>
                            
asp:Button>
                        
ItemTemplate>
                    
asp:TemplateColumn>
                
Columns>
            
asp:DataGrid>



后台&#xff1a;


protected System.Web.UI.WebControls.DataGrid DataGrid1;
   
        
public int  KeyID 
        
...{
            
get
            
...{
                
object o &#61;ViewState ["KeyID"];
                
if(o!&#61;null)
                
...{
                    
return int.Parse(ViewState ["KeyID"].ToString());
                }

                
else
                
...{
                    
return 0;
                }

            }

            
set
            
...{
                ViewState [
"KeyID"]        &#61; value;
            }

        }

        
public int  RowState 
        
...{
            
get
            
...{    return int.Parse(ViewState ["RowState"].ToString());
               
            }

            
set
            
...{
                ViewState [
"RowState"]        &#61; value;
            }

        }

        
private void Page_Load(object sender, System.EventArgs e)
        
...{
            
if(IsPostBack)
            
...{return ;
            }

            getData();
        }



        
private void getData()
        
...{
            
//SqlConnection con &#61; new SqlConnection(ConfigurationSettings.AppSettings["DsnPubs"]);
   
            SqlConnection con 
&#61; new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["Mblog"]);
            SqlCommand  cmd;
            con.Open();
            cmd 
&#61; new SqlCommand("select * from dbo.Honoree", con);
            DataGrid1.DataSource 
&#61; cmd.ExecuteReader();
            DataGrid1.DataBind();
            con.Close();
        }


        
private bool UpdateData(int ID,int OldState)
        
...{
            SqlConnection con 
&#61; new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["Mblog"]);
            SqlCommand  cmd;
            con.Open();
            
try
            
...{
                
string strSql&#61;"Update Honoree set Status&#61;{0} where HonoreeID&#61;{1}";
                strSql
&#61;string.Format(strSql,(OldState&#61;&#61;0?1:0).ToString(),ID.ToString());
                cmd 
&#61; new SqlCommand(strSql, con);
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                
return true;
            }

            
catch
            
...{
                
return  false;
            }

            
finally
            
...{
                con.Close();
                con.Dispose();
               
            }

            
return  false;
        }



        
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
        
override protected void OnInit(EventArgs e)
        
...{
            
//
            
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            
//
            InitializeComponent();
            
base.OnInit(e);
        }

       
        
/**//// 
        
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
        
/// 此方法的内容。
        
/// 

        private void InitializeComponent()
        
...{   
            
this.DataGrid1.ItemCreated &#43;&#61; new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemCreated);
            
this.DataGrid1.ItemDataBound &#43;&#61; new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
            
this.Load &#43;&#61; new System.EventHandler(this.Page_Load);

        }

        
#endregion


        
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        
...{
            
if(e.Item.ItemType&#61;&#61;ListItemType.Item  || e.Item.ItemType    &#61;&#61;    ListItemType.AlternatingItem)
            
...{
                Button b
&#61;(Button)e.Item.FindControl("changeState");
                
if(b!&#61;null)
                
...{
                   
                    b.Click
&#43;&#61;new EventHandler(b_Click);
                }

            }

       
        }


        
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        
...{
           
        }


        
private void b_Click(object sender, EventArgs e)
        
...{
            Button but 
&#61; (Button)sender;
            DataGrid dg 
&#61; (DataGrid)but.NamingContainer.NamingContainer;
            
//此处是关键&#xff01;&#xff01;即找到包含按钮的命名容器的上层命名容器
            if(dg &#61;&#61; nullreturn;
            DataGridItem di 
&#61;(DataGridItem)but.NamingContainer;
            TableCell key
&#61; (TableCell)di.Cells[0];
            TableCell state
&#61; (TableCell)di.Cells[1];

            KeyID
&#61;(key&#61;&#61;null)?0:int.Parse(key.Text);
            RowState
&#61;(state&#61;&#61;null)?0:int.Parse(state.Text);
            Response.Write(UpdateData(
this.KeyID,this.RowState).ToString());
           
            getData();
        }

       

 



推荐阅读
  • Unity3D 中 AsyncOperation 实现异步场景加载及进度显示优化技巧
    在Unity3D中,通过使用`AsyncOperation`可以实现高效的异步场景加载,并结合进度条显示来提升用户体验。本文详细介绍了如何利用`AsyncOperation`进行异步加载,并提供了优化技巧,包括进度条的动态更新和加载过程中的性能优化方法。此外,还探讨了如何处理加载过程中可能出现的异常情况,确保加载过程的稳定性和可靠性。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 在《ChartData类详解》一文中,我们将深入探讨 MPAndroidChart 中的 ChartData 类。本文将详细介绍如何设置图表颜色(Setting Colors)以及如何格式化数据值(Formatting Data Values),通过 ValueFormatter 的使用来提升图表的可读性和美观度。此外,我们还将介绍一些高级配置选项,帮助开发者更好地定制和优化图表展示效果。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
author-avatar
特别要_966
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有