CINXE.COM

Reading and Writing to Excel files using WPF 4.5 | DotNetCurry

<!DOCTYPE html> <html lang="en"> <head id="ctl00_Head1"><meta charset="utf-8" /><title> Reading and Writing to Excel files using WPF 4.5 | DotNetCurry </title><meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" /><meta name="description" content="Using WPF we can Read and Write Data to Excel files using OLEDB features. In this article, we will explain this technique with an application." /><meta name="keywords" content="WPF" /><meta name="author" content="DotNetCurry.com" /><meta name="CCBot" content="nofollow" /><link rel="shortcut icon" href="../../img/favicon.ico" /><link rel="icon" type="image/ico" href="../../img/favicon.ico" /><link rel="stylesheet" href="../../js/font-awesome/css/font-awesome.min.css" /><link rel="canonical" href="https://www.dotnetcurry.com/wpf/988/read-write-excel-files-using-wpf" /><link href="/content/site?v=dSwaMsW0iplPE-tk0JGVwhcZRf6VKKqSg-lTdPGvZso1" rel="stylesheet"/> <style>.async-hide { opacity: 0 !important} </style> <!-- GA disabled 17062020 --> <!--<script>(function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date; h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')}; (a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c; })(window,document.documentElement,'async-hide','dataLayer',4000, {'GTM-NJXQ5BG':true});</script> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-2417460-4', 'auto'); ga('require', 'GTM-NJXQ5BG'); ga('send', 'pageview'); </script>--> <!-- Facebook Pixel Code --> <script> !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1902706389940870', { //em: 'insert_email_variable' }); fbq('track', 'PageView'); </script> <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1902706389940870&ev=PageView&noscript=1" /></noscript> <!-- DO NOT MODIFY --> <!-- End Facebook Pixel Code --> <!-- Twitter universal website tag code May 30 17 --> <script> !function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments); },s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='//static.ads-twitter.com/uwt.js', a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script'); // Insert Twitter Pixel ID and Standard Event data below twq('init','nw0gz'); twq('track','PageView'); </script> <!-- End Twitter universal website tag code --> </head> <body> <form name="aspnetForm" method="post" action="./read-write-excel-files-using-wpf?ID=988" id="aspnetForm"> <div> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE0MDk2ODQwMTdkZJysVikQVHzjAtZqOeUvZO1Bu1pl" /> </div> <div> <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="A9C58E29" /> </div> <div class="wrapper"> <!-- header --> <header class="header header-megamenu"> <nav class="navbar navbar-default" role="navigation"> <div class="container"> <!--<div class="search-bar"> <input type="search" onkeyup="executeQuery();" placeholder="Type search text here..." name="search" id="search-keyword"> <div class="search-close" id="x"><i class="fa fa-times"></i></div> </div>--> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <!--<a class="navbar-brand" href="./index.html"> <img src="img/dnc-logo-tee-trans.png" srcset="img/dnc-logo-small.jpg 1980w, img/dnc-logo-x-small.jpg 320w" sizes ="100vw" class="img-responsive" alt="DNC Magazine" /> </a>--> <a class="navbar-brand" href="https://www.dotnetcurry.com"> <img src="/img/dnc-logo-small.jpg" class="img-responsive" alt="DNC Magazine" /> </a> </div> <!--<div class="search-trigger pull-right"></div>--> <div class="navbar-social pull-right visible-xs-block, hidden-xs"> <a href="https://www.facebook.com/dotnetcurry"><img src="/img/icon/fb.png" class="img-responsive" alt="DotNetCurry's Official Facebook Account" /></a> <a href="https://www.twitter.com/dotnetcurry"><img src="/img/icon/twit.png" class="img-responsive" alt="DotNetCurry's Official Twitter Account" /></a> <a href="https://github.com/dotnetcurry"><img src="/img/icon/git.png" class="img-responsive" alt="DotNetCurry's Official Github Account" /></a> </div> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse navbar-ex1-collapse"> <ul class="nav navbar-nav"> <li class="dropdown megamenu"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">Tutorials <span class="fa fa-angle-down"></span></a> <ul class="dropdown-menu"> <li> <div class="row"> <div class="col-md-3"> <h5>ASP.NET</h5> <a href="https://www.dotnetcurry.com/tutorials/aspnet">ASP.NET</a> <a href="https://www.dotnetcurry.com/tutorials/aspnet-mvc">ASP.NET MVC</a> <a href="https://www.dotnetcurry.com/tutorials/aspnet-core">ASP.NET Core</a> <a href="https://www.dotnetcurry.com/tutorials/sharepoint">SharePoint</a> <a href="https://www.dotnetcurry.com/tutorials/aspnet-ajax" class="last">ASP.NET AJAX</a> <h5>Patterns and Practices</h5> <a href="https://www.dotnetcurry.com/tutorials/software-gardening">Software Gardening</a> <a href="https://www.dotnetcurry.com/tutorials/patterns-practices">Design Patterns</a> </div> <div class="col-md-3"> <h5>.NET</h5> <a href="https://www.dotnetcurry.com/tutorials/csharp">C#</a> <a href="https://www.dotnetcurry.com/tutorials/visualstudio">Visual Studio</a> <a href="https://www.dotnetcurry.com/tutorials/vsts-tfs">VSTS (Azure DevOps) & TFS</a> <a href="https://www.dotnetcurry.com/tutorials/linq">LINQ</a> <a href="https://www.dotnetcurry.com/tutorials/entityframework">Entity Framework</a> <a href="https://www.dotnetcurry.com/tutorials/dotnetframework">.NET Framework</a> <a href="https://www.dotnetcurry.com/tutorials/dotnet-standard-core">.NET Standard & .NET Core</a> <a href="https://www.dotnetcurry.com/tutorials/wpf">WPF</a> <a href="https://www.dotnetcurry.com/tutorials/wcf">WCF</a> <a href="https://www.dotnetcurry.com/tutorials/winforms">WinForms</a> </div> <div class="col-md-3"> <h5>Cloud and Mobile</h5> <a href="https://www.dotnetcurry.com/tutorials/windows-azure">Microsoft Azure</a> <a href="https://www.dotnetcurry.com/tutorials/devops">DevOps</a> <a href="https://www.dotnetcurry.com/tutorials/xamarin">Xamarin</a> <a href="https://www.dotnetcurry.com/tutorials/powershell">Powershell</a> <a href="https://www.dotnetcurry.com/tutorials/machine-learning-ai">Machine Learning & AI</a> <a href="https://www.dotnetcurry.com/tutorials/windows-store">UWP & Windows Store</a> <a href="https://www.dotnetcurry.com/tutorials/windowsphone" class="last">Windows Phone</a> <h5>Useful</h5> <a href="https://www.dotnetcurry.com/tutorials/dotnetinterview">.NET Interview Q&A</a> <a href="https://www.dotnetcurry.com/tutorials/product-articles-review">Product Reviews</a> <a href="https://www.dotnetcurry.com/tutorials/general-programming-topics">General Topics</a> </div> <div class="col-md-3"> <h5>JavaScript</h5> <a href="https://www.dotnetcurry.com/tutorials/jquery-aspnet">jQuery</a> <a href="https://www.dotnetcurry.com/tutorials/angularjs">Angular</a> <a href="https://www.dotnetcurry.com/tutorials/typescript">TypeScript</a> <a href="https://www.dotnetcurry.com/tutorials/nodejs">Node.js</a> <a href="https://www.dotnetcurry.com/tutorials/reactjs">React.js</a> <a href="https://www.dotnetcurry.com/tutorials/backbonejs">Backbone.js</a> <a href="https://www.dotnetcurry.com/tutorials/html5-javascript">HTML5 & JavaScript</a> <a href="https://www.dotnetcurry.com/tutorials/bootstrap-css">Bootstrap & CSS</a> </div> <div class="col-md-3"> <h5>Publications</h5> <a href="http://www.jquerycookbook.com/">Books</a> <a href="https://www.dotnetcurry.com/magazine/" class="last">Magazines</a> <h5>Older Technologies</h5> <a href="https://www.dotnetcurry.com/tutorials/silverlight">Silverlight</a> <a href="https://www.dotnetcurry.com/tutorials/expression-web">Expression Web</a> <a href="https://www.dotnetcurry.com/tutorials/expression-blend">Expression Blend</a> <a href="https://www.dotnetcurry.com/tutorials/windows-vista">Windows Vista</a> <a href="https://www.dotnetcurry.com/tutorials/microsoft-word">Word 2007</a> <a href="https://www.dotnetcurry.com/tutorials/microsoft-outlook">Outlook 2007</a> <a href="#"></a> </div> </div> </li> </ul> </li> <li class="dropdown megamenu"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">Featured <span class="fa fa-angle-down"></span></a> <ul class="dropdown-menu"> <li> <div class="row"> <div class="col-md-3 col-xs-12"> <div class="header-post"> <a href="https://www.dotnetcurry.com/angular/1385/angular-4-cheat-sheet"> <div class="hp-thumb"> <img data-src="/img/header/1385.jpg" class="img-responsive lazyload" alt="" /> </div> </a> <date>Aug 30, 2017</date> <h4><a href="https://www.dotnetcurry.com/angular/1385/angular-4-cheat-sheet">Angular 4 Development Cheat Sheet</a></h4> <p class="hidden-xs">A quick reference guide to get you going with Angular development. It uses Angular v4 with TypeScript.</p> </div> </div> <div class="col-md-3 col-xs-12"> <div class="header-post"> <a href="https://www.dotnetcurry.com/patterns-practices/1364/error-handling-dotnet-projects"> <div class="hp-thumb"> <!-- <div class="hp-overlay"> <img src="img/header/gallery.png" alt=""/> <span>12 Photos</span> </div> --> <img data-src="/img/header/1364.jpg" class="img-responsive lazyload" alt="" /> </div> </a> <date>May 12, 2017</date> <h4><a href="https://www.dotnetcurry.com/patterns-practices/1364/error-handling-dotnet-projects">Error Handling in Large .NET Projects - Best Practices</a></h4> <p class="hidden-xs">Learn some effective error handling strategies that you can use in your .NET projects.</p> </div> </div> <div class="col-md-3 col-xs-12"> <div class="header-post"> <a href="https://www.dotnetcurry.com/patterns-practices/1375/behavior-driven-development-bdd"> <div class="hp-thumb"> <img data-src="/img/header/1375.jpg" class="img-responsive lazyload" alt="" /> </div> </a> <date>July 3, 2017</date> <h4><a href="https://www.dotnetcurry.com/patterns-practices/1375/behavior-driven-development-bdd">Behavior Driven Development (BDD) – an in-depth look</a></h4> <p class="hidden-xs">Learn how Behavior Driven Development (BDD) works with a real-world example of how to use it.</p> </div> </div> <div class="col-md-3 col-xs-12"> <div class="header-post"> <a href="https://www.dotnetcurry.com/patterns-practices/1305/aspect-oriented-programming-aop-csharp-using-solid"> <div class="hp-thumb"> <img data-src="/img/header/1305.jpg" class="img-responsive lazyload" alt="" /> </div> </a> <date>Sep 25, 2016</date> <h4><a href="https://www.dotnetcurry.com/patterns-practices/1305/aspect-oriented-programming-aop-csharp-using-solid">Aspect Oriented Programming (AOP) in C# with SOLID</a></h4> <p class="hidden-xs">Aspect Oriented Programming (AOP) in C# using SOLID principles, with challenges and solutions.</p> </div> </div> <div class="col-md-3 col-xs-12"> <div class="header-post"> <a href="https://www.dotnetcurry.com/javascript/1359/javascript-frameworks-aspnet-mvc-developer"> <div class="hp-thumb"> <img data-src="/img/header/1359.jpg" class="img-responsive lazyload" alt="" /> </div> </a> <date>Sep 25, 2016</date> <h4><a href="https://www.dotnetcurry.com/javascript/1359/javascript-frameworks-aspnet-mvc-developer">JavaScript Frameworks for ASP.NET MVC Developers</a></h4> <p class="hidden-xs">Learn about a few JavaScript frameworks, and which one will be a good fit in your ASP.NET MVC apps</p> </div> </div> </div> </li> </ul> </li> <li class="dropdown megamenu"> <a href="https://www.dotnetcurry.com/magazine/">.NET Magazines</a> </li> <li class="dropdown dropdown-v1"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">About<span class="fa fa-angle-down"></span></a> <ul class="dropdown-menu"> <li><a href="https://www.dotnetcurry.com/About.aspx">About Us</a></li> <li><a href="https://www.dotnetcurry.com/WriteForUs.aspx">Write For Us</a></li> <li><a href="https://www.dotnetcurry.com/Contact.aspx">Contact Us</a></li> </ul> </li> <!--<li class="dropdown megamenu"> <a href="https://www.dotnetcurry.net/s/dnc-products">Developer Tools</a> </li>--> </ul> </div> <!-- /.navbar-collapse --> </div> </nav> </header> <!--header--> <!-- container --> <div class="container"> <div class="clearfix divborder"> <div class="col-md-8 column"> <div class="col-md-12 articlebox row"> <div class="articletitle"> <h1 class="articlehead"> <span id="ctl00_MainContent_lblTitle">Reading and Writing to Excel files using WPF 4.5</span> </h1> <b>Posted by: </b> <a id="ctl00_MainContent_lnkAddedBy" href="../../Author.aspx?AuthorName=Mahesh Sabnis">Mahesh Sabnis</a> , on 3/10/2014, in <b> Category </b> <a id="ctl00_MainContent_lnkCategory" href="../../BrowseArticles.aspx?CatID=68">WPF</a> <br /> </div> <div class="articlestats"> <div class="stats1"> <b>Views: </b> 72339 <br/> </div> </div> <div class="articleabstract"> <b>Abstract: </b> Using WPF we can Read and Write Data to Excel files using OLEDB features. In this article, we will explain this technique with an application. </div> <div class="socialshare"> <a class="resp-sharing-button__link" id="fbsharelinktop" target="_blank" aria-label=""> <div class="resp-sharing-button resp-sharing-button--facebook resp-sharing-button--small"><div aria-hidden="true" class="resp-sharing-button__icon resp-sharing-button__icon--solid"> <svg version="1.1" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve"> <g> <path d="M18.768,7.465H14.5V5.56c0-0.896,0.594-1.105,1.012-1.105s2.988,0,2.988,0V0.513L14.171,0.5C10.244,0.5,9.5,3.438,9.5,5.32 v2.145h-3v4h3c0,5.212,0,12,0,12h5c0,0,0-6.85,0-12h3.851L18.768,7.465z"/> </g> </svg> <span></span> </div> </div> </a> <a class="resp-sharing-button__link" id="twtsharelinktop" target="_blank" aria-label=""> <div class="resp-sharing-button resp-sharing-button--twitter resp-sharing-button--small"><div aria-hidden="true" class="resp-sharing-button__icon resp-sharing-button__icon--solid"> <svg version="1.1" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve"> <g> <path d="M23.444,4.834c-0.814,0.363-1.5,0.375-2.228,0.016c0.938-0.562,0.981-0.957,1.32-2.019c-0.878,0.521-1.851,0.9-2.886,1.104 C18.823,3.053,17.642,2.5,16.335,2.5c-2.51,0-4.544,2.036-4.544,4.544c0,0.356,0.04,0.703,0.117,1.036 C8.132,7.891,4.783,6.082,2.542,3.332C2.151,4.003,1.927,4.784,1.927,5.617c0,1.577,0.803,2.967,2.021,3.782 C3.203,9.375,2.503,9.171,1.891,8.831C1.89,8.85,1.89,8.868,1.89,8.888c0,2.202,1.566,4.038,3.646,4.456 c-0.666,0.181-1.368,0.209-2.053,0.079c0.579,1.804,2.257,3.118,4.245,3.155C5.783,18.102,3.372,18.737,1,18.459 C3.012,19.748,5.399,20.5,7.966,20.5c8.358,0,12.928-6.924,12.928-12.929c0-0.198-0.003-0.393-0.012-0.588 C21.769,6.343,22.835,5.746,23.444,4.834z"/> </g> </svg> <span></span> </div> </div> </a> <a class="resp-sharing-button__link" id="linkdinsharelinktop" target="_blank" aria-label=""> <div class="resp-sharing-button resp-sharing-button--linkedin resp-sharing-button--small"><div aria-hidden="true" class="resp-sharing-button__icon resp-sharing-button__icon--solid"> <svg xmlns="https://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.5 21.5h-5v-13h5v13zM4 6.5C2.5 6.5 1.5 5.3 1.5 4s1-2.4 2.5-2.4c1.6 0 2.5 1 2.6 2.5 0 1.4-1 2.5-2.6 2.5zm11.5 6c-1 0-2 1-2 2v7h-5v-13h5V10s1.6-1.5 4-1.5c3 0 5 2.2 5 6.3v6.7h-5v-7c0-1-1-2-2-2z"/></svg> <span></span> </div> </div> </a> <!--<a class="resp-sharing-button__link" id="googsharelinktop" target="_blank" aria-label=""> <div class="resp-sharing-button resp-sharing-button--google resp-sharing-button--small"><div aria-hidden="true" class="resp-sharing-button__icon resp-sharing-button__icon--solid"> <svg version="1.1" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve"> <g> <path d="M11.366,12.928c-0.729-0.516-1.393-1.273-1.404-1.505c0-0.425,0.038-0.627,0.988-1.368 c1.229-0.962,1.906-2.228,1.906-3.564c0-1.212-0.37-2.289-1.001-3.044h0.488c0.102,0,0.2-0.033,0.282-0.091l1.364-0.989 c0.169-0.121,0.24-0.338,0.176-0.536C14.102,1.635,13.918,1.5,13.709,1.5H7.608c-0.667,0-1.345,0.118-2.011,0.347 c-2.225,0.766-3.778,2.66-3.778,4.605c0,2.755,2.134,4.845,4.987,4.91c-0.056,0.22-0.084,0.434-0.084,0.645 c0,0.425,0.108,0.827,0.33,1.216c-0.026,0-0.051,0-0.079,0c-2.72,0-5.175,1.334-6.107,3.32C0.623,17.06,0.5,17.582,0.5,18.098 c0,0.501,0.129,0.984,0.382,1.438c0.585,1.046,1.843,1.861,3.544,2.289c0.877,0.223,1.82,0.335,2.8,0.335 c0.88,0,1.718-0.114,2.494-0.338c2.419-0.702,3.981-2.482,3.981-4.538C13.701,15.312,13.068,14.132,11.366,12.928z M3.66,17.443 c0-1.435,1.823-2.693,3.899-2.693h0.057c0.451,0.005,0.892,0.072,1.309,0.2c0.142,0.098,0.28,0.192,0.412,0.282 c0.962,0.656,1.597,1.088,1.774,1.783c0.041,0.175,0.063,0.35,0.063,0.519c0,1.787-1.333,2.693-3.961,2.693 C5.221,20.225,3.66,19.002,3.66,17.443z M5.551,3.89c0.324-0.371,0.75-0.566,1.227-0.566l0.055,0 c1.349,0.041,2.639,1.543,2.876,3.349c0.133,1.013-0.092,1.964-0.601,2.544C8.782,9.589,8.363,9.783,7.866,9.783H7.865H7.844 c-1.321-0.04-2.639-1.6-2.875-3.405C4.836,5.37,5.049,4.462,5.551,3.89z"/> <polygon points="23.5,9.5 20.5,9.5 20.5,6.5 18.5,6.5 18.5,9.5 15.5,9.5 15.5,11.5 18.5,11.5 18.5,14.5 20.5,14.5 20.5,11.5 23.5,11.5 "/> </g> </svg> </div> </div> </a>--> </div> </div> <div id="articleBody" class="col-md-12 row"> <p>Microsoft Excel is an electronic spreadsheet that has become one of the most important and widely used software for storing, organizing and manipulating data. Be it a small medical store or the accounts department of a big enterprise, everybody uses Excel. Recently I came across a requirement where a customer had to programmatically read/write data to and from an Excel workbook file. In .NET, there are multiple ways to do so, right from using an interop assembly to using an OleDb connection API to read/write from and to Excel files.</p> <p id="wpf" class="articlead"></p> <p>To use an OLEDB connection in a WPF .NET app, the <i>Office System Driver for Data Connectivity</i><b> </b>must<b> </b>be installed on your machine. The driver can be downloaded from <a title="Oeldb driver" href="http://www.microsoft.com/en-us/download/confirmation.aspx?id=23734" rel="nofollow" target="_blank">here</a>. If the .NET application uses an OleDb provider &lsquo;Microsoft.ACE.OLEDB.12.0&rsquo; without installing this driver, the application will throw &lsquo;the 'microsoft.ace.oledb.12.0' provider is not registered on the local machine&rsquo; exception.</p> <p id="wpf" class="articlead">&nbsp;</p> <p>Another important point to note is that, since the .NET application will read the data from Excel workbook which is managed by the Operating System filesystem, the workbook must be closed in order to successfully read or write data from it, else the .NET application throws an exception. If you want to keep the workbook open and yet want the .NET application to read the data from it, then the workbook must configured as a <i>shared</i> workbook.</p> <p>For our demo, create an Excel File (2010/2013) with the following Structure:</p> <p><img title="excel-workbook" style="BORDER-LEFT-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px; BACKGROUND-IMAGE: none; BORDER-BOTTOM-WIDTH: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; DISPLAY: inline; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px" border="0" alt="excel-workbook" src="https://www.dotnetcurry.com/images/wpf/Reading-and-Writing-to-Excel-files-usi.5_9DAA/excel-workbook.png" width="452" height="448" /></p> <p>Make the workgroup shared as shown here:</p> <p><img title="shared-workgroup" style="BORDER-LEFT-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px; BACKGROUND-IMAGE: none; BORDER-BOTTOM-WIDTH: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; DISPLAY: inline; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px" border="0" alt="shared-workgroup" src="https://www.dotnetcurry.com/images/wpf/Reading-and-Writing-to-Excel-files-usi.5_9DAA/shared-workgroup.png" width="690" height="346" /></p> <p>The Sharing options are as follows:</p> <p><img title="excel-sharing" style="BORDER-LEFT-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px; BACKGROUND-IMAGE: none; BORDER-BOTTOM-WIDTH: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; DISPLAY: inline; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px" border="0" alt="excel-sharing" src="https://www.dotnetcurry.com/images/wpf/Reading-and-Writing-to-Excel-files-usi.5_9DAA/excel-sharing.png" width="356" height="418" />&nbsp;<img title="sharing-options" style="BORDER-LEFT-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px; BACKGROUND-IMAGE: none; BORDER-BOTTOM-WIDTH: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; DISPLAY: inline; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px" border="0" alt="sharing-options" src="https://www.dotnetcurry.com/images/wpf/Reading-and-Writing-to-Excel-files-usi.5_9DAA/sharing-options.png" width="356" height="418" /></p> <p>The Sharing options must be set to synchronize changes from the Excel Worksheet to the .NET client application.</p> <p><b>Step 1: </b>Open Visual Studio 2012/2013 and create a new WPF application targeted to using the .NET 4.5 framework. Name the app as &lsquo;WPF_Excel_Reader_Writer&rsquo;. In the MainWindow.xaml add a DataGrid and a Button as shown here:</p> <p><font face="Consolas">&lt;Grid&gt;<br /> &lt;Grid.RowDefinitions&gt;<br /> &nbsp;&nbsp;&nbsp; &lt;RowDefinition Height=&quot;272*&quot;/&gt;<br /> &nbsp;&nbsp;&nbsp; &lt;RowDefinition Height=&quot;71*&quot;/&gt;<br /> &lt;/Grid.RowDefinitions&gt;<br /> &lt;Button Content=&quot;Synchronize&quot; <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name=&quot;btnsync&quot; Grid.Row=&quot;1&quot;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FontSize=&quot;40&quot; FontFamily=&quot;Times New Roman&quot;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FontWeight=&quot;ExtraBold&quot;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;<br /> &lt;DataGrid Name=&quot;dgEmp&quot; AutoGenerateColumns=&quot;False&quot; ColumnWidth=&quot;*&quot;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br /> &nbsp;&nbsp;&nbsp; &lt;DataGrid.Columns&gt;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;DataGridTextColumn Header=&quot;EmpNo&quot; Binding=&quot;{Binding EmpNo}&quot;&gt;&lt;/DataGridTextColumn&gt;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;DataGridTextColumn Header=&quot;EmpName&quot; Binding=&quot;{Binding EmpName}&quot;&gt;&lt;/DataGridTextColumn&gt;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;DataGridTextColumn Header=&quot;Salary&quot; Binding=&quot;{Binding Salary}&quot;&gt;&lt;/DataGridTextColumn&gt;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;DataGridTextColumn Header=&quot;DeptName&quot; Binding=&quot;{Binding DeptName}&quot;&gt;&lt;/DataGridTextColumn&gt;<br /> &nbsp;&nbsp;&nbsp; &lt;/DataGrid.Columns&gt;<br /> &lt;/DataGrid&gt;</font></p> <p><font face="Consolas">&lt;/Grid&gt;<br /> </font></p> <p><b>Step 2: </b>To the project, add a new class file and name it as &lsquo;DataAccess.cs&rsquo;. Add the following code in it:</p> <p><font face="Consolas">using System;<br /> using System.Threading.Tasks;</font></p> <p><font face="Consolas">using System.Data.OleDb;<br /> using System.Collections.ObjectModel;</font></p> <p><font face="Consolas">namespace WPF_Excel_Reader_Writer<br /> {</font></p> <p><font face="Consolas">public class Employee<br /> {<br /> public int EmpNo { get;set; }<br /> public string EmpName { get; set; }<br /> public int Salary { get; set; }<br /> public string DeptName { get; set; }<br /> }<br /> public class DataAccess<br /> {<br /> OleDbConnection Conn;<br /> OleDbCommand Cmd;</font></p> <p><font face="Consolas">public DataAccess()<br /> {<br /> &nbsp;&nbsp;&nbsp; Conn = new OleDbConnection(&quot;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\\FromC\\VS2013\\WPF_45_DEMOS\\Employee.xlsx;Extended Properties=\&quot;Excel 12.0 Xml;HDR=YES;\&quot;&quot;); <br /> }</font></p> <p><font face="Consolas">/// &lt;summary&gt;<br /> /// Method to Get All the Records from Excel<br /> /// &lt;/summary&gt;<br /> /// &lt;returns&gt;&lt;/returns&gt;<br /> public async Task&lt;ObservableCollection&lt;Employee&gt;&gt; GetDataFormExcelAsync()<br /> {<br /> &nbsp;&nbsp;&nbsp; ObservableCollection&lt;Employee&gt; Employees = new ObservableCollection&lt;Employee&gt;(); <br /> &nbsp;&nbsp;&nbsp; await Conn.OpenAsync();<br /> &nbsp;&nbsp;&nbsp; Cmd = new OleDbCommand();<br /> &nbsp;&nbsp;&nbsp; Cmd.Connection = Conn;<br /> &nbsp;&nbsp;&nbsp; Cmd.CommandText = &quot;Select * from [Sheet1$]&quot;;<br /> &nbsp;&nbsp;&nbsp; var Reader = await Cmd.ExecuteReaderAsync();<br /> &nbsp;&nbsp;&nbsp; while (Reader.Read())<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Employees.Add(new Employee() { <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EmpNo = Convert.ToInt32(Reader[&quot;EmpNo&quot;]),<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EmpName = Reader[&quot;EmpName&quot;].ToString(),<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DeptName = Reader[&quot;DeptName&quot;].ToString(),<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Salary = Convert.ToInt32(Reader[&quot;Salary&quot;]) <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; Reader.Close();<br /> &nbsp;&nbsp;&nbsp; Conn.Close();<br /> &nbsp;&nbsp;&nbsp; return Employees;<br /> }</font></p> <p><font face="Consolas">/// &lt;summary&gt;<br /> /// Method to Insert Record in the Excel<br /> /// S1. If the EmpNo =0, then the Operation is Skipped.<br /> /// S2. If the Employee is already exist, then it is taken for Update<br /> /// &lt;/summary&gt;<br /> /// &lt;param name=&quot;Emp&quot;&gt;&lt;/param&gt;<br /> public async Task&lt;bool&gt; InsertOrUpdateRowInExcelAsync(Employee Emp)<br /> {<br /> &nbsp;&nbsp;&nbsp; bool IsSave = false;<br /> &nbsp;&nbsp;&nbsp; //S1<br /> &nbsp;&nbsp;&nbsp; if (Emp.EmpNo != 0)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; await Conn.OpenAsync();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cmd = new OleDbCommand();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cmd.Connection = Conn;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cmd.Parameters.AddWithValue(&quot;@EmpNo&quot;, Emp.EmpNo);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cmd.Parameters.AddWithValue(&quot;@EmpName&quot;, Emp.EmpName);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cmd.Parameters.AddWithValue(&quot;@Salary&quot;, Emp.Salary);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cmd.Parameters.AddWithValue(&quot;@DeptName&quot;, Emp.DeptName);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //S2<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!CheckIfRecordExistAsync(Emp).Result)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cmd.CommandText = &quot;Insert into [Sheet1$] values (@EmpNo,@EmpName,@Salary,@DeptName)&quot;;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Emp.EmpName != String.Empty || Emp.DeptName != String.Empty)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cmd.CommandText = &quot;Update [Sheet1$] set EmpNo=@EmpNo,EmpName=@EmpName,Salary=@Salary,DeptName=@DeptName where EmpNo=@EmpNo&quot;;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int result = await Cmd.ExecuteNonQueryAsync();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (result &gt; 0)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IsSave = true;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Conn.Close();<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; return IsSave;</font></p> <p><font face="Consolas">}</font></p> <p>&nbsp;</p> <p><font face="Consolas">/// &lt;summary&gt;<br /> /// The method to check if the record is already available <br /> /// in the workgroup<br /> /// &lt;/summary&gt;<br /> /// &lt;param name=&quot;emp&quot;&gt;&lt;/param&gt;<br /> /// &lt;returns&gt;&lt;/returns&gt;<br /> private async Task&lt;bool&gt; CheckIfRecordExistAsync(Employee emp)<br /> {<br /> &nbsp;&nbsp;&nbsp; bool IsRecordExist = false;<br /> &nbsp;&nbsp;&nbsp; Cmd.CommandText = &quot;Select * from [Sheet1$] where EmpNo=@EmpNo&quot;;<br /> &nbsp;&nbsp;&nbsp; var Reader = await Cmd.ExecuteReaderAsync();<br /> &nbsp;&nbsp;&nbsp; if (Reader.HasRows)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IsRecordExist = true;<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp; <br /> &nbsp;&nbsp;&nbsp; Reader.Close();<br /> &nbsp;&nbsp;&nbsp; return IsRecordExist;<br /> }<br /> }</font></p> <p><font face="Consolas">}<br /> </font></p> <p>The code we just saw does the following:</p> <p>-The Employee class is used to define attributes for the Employee object.</p> <p>-The class <i>DataAccess</i> is used to interact with the Excel file using the following declarations:</p> <ul> <li>The connection and command objects are defined using <i>OleDbConnection</i> and <i>OleDbCommand</i> respectively.</li> <li>The constructor defines a connection string for the Excel file using Mictosoft.ACE.OLEDB.12.0 provider. Here the path of the Excel file passed to the connection string need to be changed as per the location of the Excel file.</li> <li>All methods are defined as async to make Async calls.</li> <li>The <i>GetDataFromExcelAsync()</i><b> </b>method opens connection to the Excel file and reads data from the Worksheet with the name <i>Sheet1</i>. This methods returns an <i>ObservableCollection</i>.</li> <li>The method <i>InsertOrUpdateRowInExcelAsync()</i> method accepts an Employee objects. If the EmpNo from this object is zero(0) then the execution of the rest of the code of this method is skipped. This is just a simple check and you can customize is as per your business needs. This method calls the <i>CheckIfRecordExistAsync()</i> method which is responsible to check if the Employee record already exists. If yes, then the record is accepted for update, else a new record is created.</li> </ul> <p><b>Step 3: </b>We will now subscribe to the following events:</p> <ul> <li>Loaded event of the Window</li> <li>Click event of the button</li> <li>CellEditEnding, RowEditEnding and SelectionChanged events of the DataGrid</li> </ul> <p><b>Step 4: </b>Add the following code in the MainWindow.xaml.cs:</p> <p><font face="Consolas">public partial class MainWindow : Window<br /> {<br /> //The object of the DataAccess class<br /> DataAccess objDs;<br /> public MainWindow()<br /> {<br /> &nbsp;&nbsp;&nbsp; InitializeComponent();<br /> }</font></p> <p><font face="Consolas">//The Employee Object for Edit<br /> Employee emp = new Employee();<br /> /// &lt;summary&gt;<br /> /// On Load get data from the Excel<br /> /// &lt;/summary&gt;<br /> /// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;<br /> /// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;<br /> private void Window_Loaded(object sender, RoutedEventArgs e)<br /> {<br /> &nbsp;&nbsp;&nbsp; objDs = new DataAccess(); <br /> &nbsp;&nbsp;&nbsp; try<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dgEmp.ItemsSource = objDs.GetDataFormExcelAsync().Result;<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; catch (Exception ex)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show(ex.Message);<br /> &nbsp;&nbsp;&nbsp; }<br /> }<br /> /// &lt;summary&gt;<br /> /// TO Synchronize the Excel Workbook with the Application <br /> /// &lt;/summary&gt;<br /> /// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;<br /> /// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;<br /> private&nbsp;&nbsp; void btnsync_Click(object sender, RoutedEventArgs e)<br /> {<br /> &nbsp;&nbsp;&nbsp; try<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dgEmp.ItemsSource =&nbsp;&nbsp; objDs.GetDataFormExcelAsync().Result;<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; catch (Exception ex)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show(ex.Message);<br /> &nbsp;&nbsp;&nbsp; }<br /> }<br /> /// &lt;summary&gt;<br /> /// Read Data entered in each Cell<br /> /// &lt;/summary&gt;<br /> /// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;<br /> /// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;<br /> private void dgEmp_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)<br /> {<br /> &nbsp;&nbsp;&nbsp; try<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FrameworkElement eleEno = dgEmp.Columns[0].GetCellContent(e.Row);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (eleEno.GetType() == typeof(TextBox))<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; emp.EmpNo = Convert.ToInt32(((TextBox)eleEno).Text);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p> <p><font face="Consolas">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FrameworkElement eleEname = dgEmp.Columns[1].GetCellContent(e.Row);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (eleEname.GetType() == typeof(TextBox))<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; emp.EmpName = ((TextBox)eleEname).Text;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p> <p><font face="Consolas">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FrameworkElement eleSal = dgEmp.Columns[2].GetCellContent(e.Row);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (eleSal.GetType() == typeof(TextBox))<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; emp.Salary = Convert.ToInt32(((TextBox)eleSal).Text);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p> <p><font face="Consolas">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FrameworkElement eleDname = dgEmp.Columns[3].GetCellContent(e.Row);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (eleDname.GetType() == typeof(TextBox))<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; emp.DeptName = ((TextBox)eleDname).Text;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p> <p><font face="Consolas">&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; catch (Exception ex)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show(ex.Message);<br /> &nbsp;&nbsp;&nbsp; }<br /> }<br /> /// &lt;summary&gt;<br /> /// Get the Complete row<br /> /// &lt;/summary&gt;<br /> /// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;<br /> /// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;<br /> private void dgEmp_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)<br /> {<br /> &nbsp;&nbsp;&nbsp; try<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool IsSave = objDs.InsertOrUpdateRowInExcelAsync(emp).Result;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (IsSave)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show(&quot;Record Saved Successfully&quot;);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show(&quot;Problem Occured&quot;);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; catch (Exception ex)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show(ex.Message);<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; <br /> }<br /> /// &lt;summary&gt;<br /> /// Select the Recod for the Update<br /> /// &lt;/summary&gt;<br /> /// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;<br /> /// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;<br /> private void dgEmp_SelectionChanged(object sender, SelectionChangedEventArgs e)<br /> {<br /> &nbsp;&nbsp;&nbsp; emp = dgEmp.SelectedItem as Employee;<br /> }<br /> }</font></p> <p>The code has the following specifications:</p> <ul> <li>The Loaded event makes call to <i>GetDataFromExcelAsync()</i><b> </b>method from the DataAccess class. The result returned from the method is then displayed in the DataGrid using <i>ItemsSource</i> property</li> <li>In the <i>SelectionChanged</i> implementation, the Employee object is generated which will be used for update</li> <li>The <i>CellEditEnding</i> implementation is used to read the cell value entered in the specific row of the DataGrid. These values will be put in the Employee object. This object will then be used to insert or update in the Excel Worksheet</li> <li>The <i>RowEditEnding</i> implementation will make a call to the <i>InsertOrUpdateRowInExcelAsync()</i><b> </b>method and pass an Employee to it for inserting or updating</li> <li>Clicking the button will retrieve the latest data from the worksheet and display it in the DataGrid</li> </ul> <p><b>Step 5: </b>Run the application. You will see the following:</p> <p><img title="wpf-excel" style="BORDER-LEFT-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px; BACKGROUND-IMAGE: none; BORDER-BOTTOM-WIDTH: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; DISPLAY: inline; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px" border="0" alt="wpf-excel" src="https://www.dotnetcurry.com/images/wpf/Reading-and-Writing-to-Excel-files-usi.5_9DAA/wpf-excel.png" width="582" height="400" /></p> <p>To test synchronization, add a new record in Excel and click on the &lsquo;Synchronize&rsquo; button. The newly added record will be as shown below:</p> <p><img title="excel-wpf-add-new" style="BORDER-LEFT-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px; BACKGROUND-IMAGE: none; BORDER-BOTTOM-WIDTH: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; DISPLAY: inline; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px" border="0" alt="excel-wpf-add-new" src="https://www.dotnetcurry.com/images/wpf/Reading-and-Writing-to-Excel-files-usi.5_9DAA/excel-wpf-add-new.png" width="583" height="402" /></p> <p>(that&rsquo;s the best straight row highlighting I could do after 3 attempts ;) )</p> <p>Since the Workbook is shared, the data entered in the worksheet of the workbook can be directly synchronized even when the workbook is open.</p> <p>Similarly enter a record in the DataGrid Row. When you click on the next row or the current row loses focus, the record will be saved in the Worksheet as shown here.</p> <p><img title="wpf-grid-synchronize" style="BORDER-LEFT-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px; BACKGROUND-IMAGE: none; BORDER-BOTTOM-WIDTH: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; DISPLAY: inline; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px" border="0" alt="wpf-grid-synchronize" src="https://www.dotnetcurry.com/images/wpf/Reading-and-Writing-to-Excel-files-usi.5_9DAA/wpf-grid-synchronize.png" width="583" height="401" /></p> <p>To verify, close the application and reopen the Excel file. The newly added record will be displayed in Excel as shown here:</p> <p><img title="wpf-new-record" style="BORDER-LEFT-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px; BACKGROUND-IMAGE: none; BORDER-BOTTOM-WIDTH: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; DISPLAY: inline; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px" border="0" alt="wpf-new-record" src="https://www.dotnetcurry.com/images/wpf/Reading-and-Writing-to-Excel-files-usi.5_9DAA/wpf-new-record.png" width="506" height="443" /></p> <p>And that&rsquo;s how using WPF, we can Read and Write Data to Excel files.</p> <p><b>Conclusion: </b>We just saw that<b> </b>if Excel files are used as a data store, using OleDb features the data from the Workgroup can be read and manipulated in a WPF .NET application.</p> <p><a title="WPF read write Excel" href="https://github.com/dotnetcurry/wpf-read-write-excel" target="_blank"><strong>Download the entire source code of this article</strong></a> (Github)</p> <p><em>This article has been editorially reviewed by </em><a href="https://www.dotnetcurry.com/author/suprotim-agarwal"><em>Suprotim Agarwal.</em></a></p> <div id="csharpbook" class="col-xs-12 col-sm-12 col-md-12 col-lg-12 articletext"> <!--<a href="http://www.dotnetcurry.org/r/dnc-csharpbk-web-imgbtm" target="_blank" style="color:#cd282f"><img alt="Absolutely Awesome Book on C# and .NET" src="/csharpbook/images/csharpbook-hori.jpg" /></a>--> <div class="col-md-3 col-sm-3 col-xs-12"> <a href="https://www.dotnetcurry.com/csharpbook" target="_blank"><img alt="Absolutely Awesome Book on C# and .NET" src="/csharpbook/images/csharp-book-ad.jpg" /></a> </div> <div class="col-md-9 col-sm-9 col-xs-12"> <p>C# and .NET have been around for a very long time, but their constant growth means there’s always more to learn.</p> <p>We at DotNetCurry are very excited to announce <strong><a href="https://www.dotnetcurry.com/csharpbook" target="_blank">The Absolutely Awesome Book on C# and .NET</a></strong>. This is a 500 pages concise technical eBook available in PDF, ePub (iPad), and Mobi (Kindle). </p><p>Organized around concepts, this Book aims to provide a concise, yet solid foundation in C# and .NET, covering <b>C# 6.0, C# 7.0 and .NET Core, with chapters on the latest .NET Core 3.0, .NET Standard and C# 8.0 (final release) too</b>. Use these concepts to deepen your existing knowledge of C# and .NET, to have a solid grasp of the latest in C# and .NET OR to crack your next .NET Interview.</p> <p><strong><a href="https://www.dotnetcurry.com/csharpbook" target="_blank" style="color:#cd282f">Click here to Explore the Table of Contents or Download Sample Chapters!<a /></strong></p> </div> </div> <div class="footerheading margin-top-20">What Others Are Reading!</div> <div class="col-xs-12 col-sm-12 col-md-12 similarauthor"> <div class="row"> <div class="col-md-12 similararticles"> <a href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=1211" style="color:#4A75AD;font-weight:normal;">WPF ItemsControl – Advanced</a> <br /><br /> <a href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=1187" style="color:#4A75AD;font-weight:normal;">Using WPF 4.5 to implement a Responsive UI with Asynchronous Operations</a> <br /><br /> <a href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=1160" style="color:#4A75AD;font-weight:normal;">WPF ItemsControl Fundamentals - Part 1</a> <br /><br /> <a href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=1142" style="color:#4A75AD;font-weight:normal;">Resources in WPF and difference between Static Resource and Dynamic Resource</a> <br /><br /> <a href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=1130" style="color:#4A75AD;font-weight:normal;">WPF Commanding: Enable Disable Button with Command Property</a> <br /><br /> <a href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=1071" style="color:#4A75AD;font-weight:normal;">Custom Commanding Behavior in WPF TextBox using System.Windows.Interactivity namespace</a> <br /><br /> <span id="ctl00_MainContent_SimilarPosts1_lblCategoNam"></span> </div> </div> </div> <!-- DNC_BottomText --> <div class="visible-xs visible-sm visible-md visible-lg"> <div id='dnc-bot-txtad' class="articletext"> </div> </div> <div class="socialbox"> <b>Was this article worth reading? Share it with fellow developers too. Thanks!</b> <br/> <!-- Sharingbutton Facebook --> <a class="resp-sharing-button__link" id="fbsharelink" target="_blank" aria-label="Share on Facebook"> <div class="resp-sharing-button resp-sharing-button--facebook resp-sharing-button--large"><div aria-hidden="true" class="resp-sharing-button__icon resp-sharing-button__icon--solid"> <svg version="1.1" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve"> <g> <path d="M18.768,7.465H14.5V5.56c0-0.896,0.594-1.105,1.012-1.105s2.988,0,2.988,0V0.513L14.171,0.5C10.244,0.5,9.5,3.438,9.5,5.32 v2.145h-3v4h3c0,5.212,0,12,0,12h5c0,0,0-6.85,0-12h3.851L18.768,7.465z"/> </g> </svg> </div>Share on Facebook</div> </a> <!-- Sharingbutton Twitter --> <a class="resp-sharing-button__link" id="twtsharelink" target="_blank" aria-label="Share on Twitter"> <div class="resp-sharing-button resp-sharing-button--twitter resp-sharing-button--large"><div aria-hidden="true" class="resp-sharing-button__icon resp-sharing-button__icon--solid"> <svg version="1.1" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve"> <g> <path d="M23.444,4.834c-0.814,0.363-1.5,0.375-2.228,0.016c0.938-0.562,0.981-0.957,1.32-2.019c-0.878,0.521-1.851,0.9-2.886,1.104 C18.823,3.053,17.642,2.5,16.335,2.5c-2.51,0-4.544,2.036-4.544,4.544c0,0.356,0.04,0.703,0.117,1.036 C8.132,7.891,4.783,6.082,2.542,3.332C2.151,4.003,1.927,4.784,1.927,5.617c0,1.577,0.803,2.967,2.021,3.782 C3.203,9.375,2.503,9.171,1.891,8.831C1.89,8.85,1.89,8.868,1.89,8.888c0,2.202,1.566,4.038,3.646,4.456 c-0.666,0.181-1.368,0.209-2.053,0.079c0.579,1.804,2.257,3.118,4.245,3.155C5.783,18.102,3.372,18.737,1,18.459 C3.012,19.748,5.399,20.5,7.966,20.5c8.358,0,12.928-6.924,12.928-12.929c0-0.198-0.003-0.393-0.012-0.588 C21.769,6.343,22.835,5.746,23.444,4.834z"/> </g> </svg> </div>Share on Twitter</div> </a> <!-- Sharingbutton LinkedIn --> <a class="resp-sharing-button__link" id="linkdinsharelink" target="_blank" aria-label="Share on LinkedIn"> <div class="resp-sharing-button resp-sharing-button--linkedin resp-sharing-button--large"><div aria-hidden="true" class="resp-sharing-button__icon resp-sharing-button__icon--solid"> <svg xmlns="https://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.5 21.5h-5v-13h5v13zM4 6.5C2.5 6.5 1.5 5.3 1.5 4s1-2.4 2.5-2.4c1.6 0 2.5 1 2.6 2.5 0 1.4-1 2.5-2.6 2.5zm11.5 6c-1 0-2 1-2 2v7h-5v-13h5V10s1.6-1.5 4-1.5c3 0 5 2.2 5 6.3v6.7h-5v-7c0-1-1-2-2-2z"/></svg> </div>Share on LinkedIn</div> </a> <!-- Sharingbutton Google+ --> <a class="resp-sharing-button__link" id="googsharelink" target="_blank" aria-label="Share on Google+"> <div class="resp-sharing-button resp-sharing-button--google resp-sharing-button--large"><div aria-hidden="true" class="resp-sharing-button__icon resp-sharing-button__icon--solid"> <svg version="1.1" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve"> <g> <path d="M11.366,12.928c-0.729-0.516-1.393-1.273-1.404-1.505c0-0.425,0.038-0.627,0.988-1.368 c1.229-0.962,1.906-2.228,1.906-3.564c0-1.212-0.37-2.289-1.001-3.044h0.488c0.102,0,0.2-0.033,0.282-0.091l1.364-0.989 c0.169-0.121,0.24-0.338,0.176-0.536C14.102,1.635,13.918,1.5,13.709,1.5H7.608c-0.667,0-1.345,0.118-2.011,0.347 c-2.225,0.766-3.778,2.66-3.778,4.605c0,2.755,2.134,4.845,4.987,4.91c-0.056,0.22-0.084,0.434-0.084,0.645 c0,0.425,0.108,0.827,0.33,1.216c-0.026,0-0.051,0-0.079,0c-2.72,0-5.175,1.334-6.107,3.32C0.623,17.06,0.5,17.582,0.5,18.098 c0,0.501,0.129,0.984,0.382,1.438c0.585,1.046,1.843,1.861,3.544,2.289c0.877,0.223,1.82,0.335,2.8,0.335 c0.88,0,1.718-0.114,2.494-0.338c2.419-0.702,3.981-2.482,3.981-4.538C13.701,15.312,13.068,14.132,11.366,12.928z M3.66,17.443 c0-1.435,1.823-2.693,3.899-2.693h0.057c0.451,0.005,0.892,0.072,1.309,0.2c0.142,0.098,0.28,0.192,0.412,0.282 c0.962,0.656,1.597,1.088,1.774,1.783c0.041,0.175,0.063,0.35,0.063,0.519c0,1.787-1.333,2.693-3.961,2.693 C5.221,20.225,3.66,19.002,3.66,17.443z M5.551,3.89c0.324-0.371,0.75-0.566,1.227-0.566l0.055,0 c1.349,0.041,2.639,1.543,2.876,3.349c0.133,1.013-0.092,1.964-0.601,2.544C8.782,9.589,8.363,9.783,7.866,9.783H7.865H7.844 c-1.321-0.04-2.639-1.6-2.875-3.405C4.836,5.37,5.049,4.462,5.551,3.89z"/> <polygon points="23.5,9.5 20.5,9.5 20.5,6.5 18.5,6.5 18.5,9.5 15.5,9.5 15.5,11.5 18.5,11.5 18.5,14.5 20.5,14.5 20.5,11.5 23.5,11.5 "/> </g> </svg> </div>Share on Google+</div> </a> <!--<ul class="socialshare"> <li><div class="gplusarticle"><b>Please Share this article if you think it was worth reading. Thanks!</b></div></li> <li><div class="fb-share-button" data-layout="button"> </div> </li> <li><script type="IN/Share"></script></li> </ul>--> </div> <br /> <div class="col-xs-12 col-sm-12 col-md-12 similarauthor"> <div class="row footerheading">Author</div> <div class="row"> <div class="col-md-12"> <div class="col-md-12 author-wrap img-rounded"> <div class="author-image thumbnail"> <img id="ctl00_MainContent_authorInfo_imgAuthor" onerror="this.onload = null; this.src=&#39;/images/authors/NoImage.jpg&#39;;" src="../../images/authors/Mahesh%20Sabnis.jpg" style="border-width:0px;" /> </div> <div class="author-desc caption"> Mahesh Sabnis is a DotNetCurry author and a Microsoft MVP having over two decades of experience in IT education and development. He is a Microsoft Certified Trainer (MCT) since 2005 and has conducted various Corporate Training programs for .NET Technologies (all versions), and Front-end technologies like Angular and React. Follow him on twitter @<a href='http://twitter.com/maheshdotnet'>maheshdotnet</a> or connect with him on <a href='https://www.linkedin.com/in/mahesh-sabnis-3642999/'>LinkedIn</a> </div> </div> </div> </div> </div> </div> <!--<div class="footerheading">Further Reading - Articles You May Like!</div>--> <div class="marginspace"> <div id='ban-pos-9-90'></div> <div id='ban-pos-10-90'></div> <div id='ban-pos-11-90'></div> </div> <br /><br /> <div class="col-xs-12 col-sm-12 col-md-12"> <!--<a href="http://www.copyscape.com/" target="blank" rel="nofollow">--><img src="/images/copyscape.gif" alt="Page copy protected against web site content infringement by Copyscape" title="Do not copy content from the page. Plagiarism will be detected by Copyscape." height="16" border="0"/><!--</a>--> </div> <br /><br /> <br /> <hr /> <div id="ctl00_MainContent_panComments" class="col-md-12 spacer"> <div class="footerheading">Feedback - Leave us some adulation, criticism and everything in between!</div> <ul class="tabHeader"> <li><a class="show-comments" href="#t1">Click here to post your Comments</a> </li> <li><a href="#t2">Old Comments (Read Only)</a> </li> </ul> <div class="tabContent"> <div id="t1" class="col-md-12 column"> <div id="disqus_thread"></div> <!--<script type="text/javascript"> var disqus_shortname = 'dotnetcurry'; /* * * DON'T EDIT BELOW THIS LINE * * */ (function () { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })(); </script> <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript> <a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>--> </div> <div id="t2"> <table id="ctl00_MainContent_dlstComments" class="table col-xs-4 col-sm-6 col-md-12" cellspacing="0" border="0" style="color:#333333;border-collapse:collapse;"> <tr> <td style="color:#333333;background-color:#EFEFE3;"> <div> <table class="table"> <tr><td class="row"> <b>Comment posted by <span id="ctl00_MainContent_dlstComments_ctl00_lnkAddedBy" style="color:#6592C6;">Waldemar Lederer</span> on Monday, April 28, 2014 8:47 AM </b> </td> <td style="text-align: right;"> </td></tr> </table> Tried to run it with Visual C# 2012 (express) on a laptop (Windows 7 pro, Office 2007 pro). <br>Got an error “Object reference not set to an instance of an object?” <br>What does it mean? Something not installed, not declared or something else? </div> </td> </tr><tr> <td style="color:#333333;background-color:White;"> <div> <table class="table"> <tr><td class="row"> <b>Comment posted by <span id="ctl00_MainContent_dlstComments_ctl01_lnkAddedBy" style="color:#6592C6;">Silvia</span> on Saturday, June 28, 2014 9:49 AM </b> </td> <td style="text-align: right;"> </td></tr> </table> I use VS 2013 and everythigs looks OK, but the project can&#39;t connect to the .xlsx file. Starts, but empty. I changed the path here: Data Source=F:\\FromC\\VS2013\\WPF_45_DEMOS\\Employee.xlsx - to my file location. I installed Office System Driver for Data Connectivity. Is there something else I should do? <br>Thank You in advance! <br> <br>Silvia </div> </td> </tr><tr> <td style="color:#333333;background-color:#EFEFE3;"> <div> <table class="table"> <tr><td class="row"> <b>Comment posted by <span id="ctl00_MainContent_dlstComments_ctl02_lnkAddedBy" style="color:#6592C6;">sam</span> on Monday, September 8, 2014 12:36 AM </b> </td> <td style="text-align: right;"> </td></tr> </table> HI Mahesh <br>i am new in wpf can u help me uploading files to database and retrive them <br> </div> </td> </tr><tr> <td style="color:#333333;background-color:White;"> <div> <table class="table"> <tr><td class="row"> <b>Comment posted by <span id="ctl00_MainContent_dlstComments_ctl03_lnkAddedBy" style="color:#6592C6;">sam</span> on Monday, September 8, 2014 7:39 AM </b> </td> <td style="text-align: right;"> </td></tr> </table> Hi Mahesh <br> <br>I found the solution ,how to save a pdf to database <br>can u say to me how to save multiple files to data base and retrive then accordingly <br> <br> <br>Thanks in Advance <br> <br>sam </div> </td> </tr><tr> <td style="color:#333333;background-color:#EFEFE3;"> <div> <table class="table"> <tr><td class="row"> <b>Comment posted by <span id="ctl00_MainContent_dlstComments_ctl04_lnkAddedBy" style="color:#6592C6;">Jonathan Alfredo Gómez Gómez</span> on Thursday, October 23, 2014 8:43 AM </b> </td> <td style="text-align: right;"> </td></tr> </table> Hi Mahesh! <br>Great article, it was just what I&#39;ve been looking for. </div> </td> </tr><tr> <td style="color:#333333;background-color:White;"> <div> <table class="table"> <tr><td class="row"> <b>Comment posted by <span id="ctl00_MainContent_dlstComments_ctl05_lnkAddedBy" style="color:#6592C6;">sampad</span> on Wednesday, November 5, 2014 4:07 AM </b> </td> <td style="text-align: right;"> </td></tr> </table> Hi Mahesh <br>i put a checkbox in template field of a listbox.for insert it is working fine.but while retriving the data i am unable to check those checkboxes .can you please give me some solution for it <br> <br>Thanks in advance <br> </div> </td> </tr><tr> <td style="color:#333333;background-color:#EFEFE3;"> <div> <table class="table"> <tr><td class="row"> <b>Comment posted by <span id="ctl00_MainContent_dlstComments_ctl06_lnkAddedBy" style="color:#6592C6;">Jorge</span> on Thursday, December 4, 2014 4:12 PM </b> </td> <td style="text-align: right;"> </td></tr> </table> Hi Mahesh! <br>Awesome article! <br>Please help me with this: <br>How can I insert a row by code? <br> <br>Regards </div> </td> </tr><tr> <td style="color:#333333;background-color:White;"> <div> <table class="table"> <tr><td class="row"> <b>Comment posted by <span id="ctl00_MainContent_dlstComments_ctl07_lnkAddedBy" style="color:#6592C6;">J. Heiser</span> on Tuesday, February 3, 2015 12:29 PM </b> </td> <td style="text-align: right;"> </td></tr> </table> Great article Mahesh. <br> <br>Need to know how you linked in the events to support editing, etc. For example how does the &quot;dgEmp_CellEditEnding&quot; event fire? </div> </td> </tr><tr> <td style="color:#333333;background-color:#EFEFE3;"> <div> <table class="table"> <tr><td class="row"> <b>Comment posted by <span id="ctl00_MainContent_dlstComments_ctl08_lnkAddedBy" style="color:#6592C6;">J. Heiser</span> on Wednesday, February 4, 2015 7:35 AM </b> </td> <td style="text-align: right;"> </td></tr> </table> Missed the subscription step. Added the events to the button and datagrid. All works well. Thanks Mahesh </div> </td> </tr><tr> <td style="color:White;background-color:#990000;font-weight:bold;"> </td> </tr> </table> </div> <!-- t2 --> </div> <!-- tabcontent --> </div> <!-- Place this render call where appropriate <script type="text/javascript"> (function () { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })(); </script> <script src="//platform.linkedin.com/in.js" type="text/javascript"> lang: en_US</script> <script> !function (d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (!d.getElementById(id)) { js = d.createElement(s); js.id = id; js.src = "//platform.twitter.com/widgets.js"; fjs.parentNode.insertBefore(js, fjs); } } (document, "script", "twitter-wjs");</script>--> <!-- Finally, to actually run the highlighter, you need to include this JS on your page --> </div> <div id="rightcol" class="col-md-4"> <!-- <div class="row"> <div class="spacerforsearch"> <div class="input-group"> <input name="ctl00$searchbox" id="ctl00_searchbox" type="text" class="form-control" placeholder="Search DotNetCurry.com for..." onFocus="this.className = &#39;form-control&#39;" style="border-color:#94C7EF;border-width:1px;border-style:solid;width:100%" /> <span class="input-group-btn"> <input type="submit" name="ctl00$SearchButton" value="Go!" id="ctl00_SearchButton" class="btn btn-default" type="button" /> </span> </div> </div> </div> --> <div class="margin-vertical-20" /> <div class="side-widget"> <div class="featured-tools"> <span>Featured Tools</span> <div id="creatives"> <div id='ban-pos-1' style='display: none'> </div> <div id='ban-pos-2'> <div class="padding-vertical-10"></div> </div> <div id='ban-pos-3'> </div> <div class="padding-vertical-10"></div> <div id='ban-pos-4-250'> </div> <div id='ban-pos-5-250'> </div> <div id='ban-pos-6-250'> </div> </div> </div> </div> <div class="sec-title"> <h4>Categories</h4> </div> <div class="side-widget"> <ul id="toggle-view"> <li> <h3>.NET Web</h3> <span class="fa fa-angle-down"></span> <div class="toggle-panel"> <div> <a href="https://www.dotnetcurry.com/tutorials/aspnet">ASP.NET</a> <a href="https://www.dotnetcurry.com/tutorials/aspnet-mvc">ASP.NET MVC</a> </div> <div> <a href="https://www.dotnetcurry.com/tutorials/aspnet-core">ASP.NET Core</a> <a href="https://www.dotnetcurry.com/tutorials/aspnet-ajax">ASP.NET AJAX</a> </div> <div> <a href="https://www.dotnetcurry.com/tutorials/sharepoint">SharePoint</a> <a href="https://www.dotnetcurry.com/tutorials/wcf">WCF</a> </div> </div> </li> <li> <h3>.NET Framework, Visual Studio and C#</h3> <span class="fa fa-angle-down"></span> <div class="toggle-panel"> <div> <a href="https://www.dotnetcurry.com/tutorials/csharp">C#</a> <a href="https://www.dotnetcurry.com/tutorials/linq">LINQ</a> </div> <div> <a href="https://www.dotnetcurry.com/tutorials/visualstudio">Visual Studio</a> <a href="https://www.dotnetcurry.com/tutorials/vsts-tfs">VSTS & TFS</a> </div> <div> <a href="https://www.dotnetcurry.com/tutorials/entityframework">Entity Framework</a> <a href="https://www.dotnetcurry.com/tutorials/dotnetframework">.NET Framework</a> </div> <div> <a href="https://www.dotnetcurry.com/tutorials/dotnet-standard-core">.NET Standard & .NET Core</a> </div> </div> </li> <li> <h3>Patterns & Practices</h3> <span class="fa fa-angle-down"></span> <div class="toggle-panel"> <div> <a href="https://www.dotnetcurry.com/tutorials/patterns-practices">Design Patterns</a> <a href="https://www.dotnetcurry.com/tutorials/software-gardening">Software Gardening</a> </div> </div> </li> <li> <h3>Cloud and Mobile</h3> <span class="fa fa-angle-down"></span> <div class="toggle-panel"> <div> <a href="https://www.dotnetcurry.com/tutorials/windows-azure">Microsoft Azure</a> <a href="https://www.dotnetcurry.com/tutorials/xamarin">Xamarin</a> </div> <div> <a href="https://www.dotnetcurry.com/tutorials/powershell">Powershell</a> <a href="https://www.dotnetcurry.com/tutorials/machine-learning-ai">Machine Learning & AI</a> </div> <div> <a href="https://www.dotnetcurry.com/tutorials/windows-store">UWP & Windows Store</a> <a href="https://www.dotnetcurry.com/tutorials/windowsphone">Windows Phone</a> </div> </div> </li> <li> <h3>JavaScript</h3> <span class="fa fa-angle-down"></span> <div class="toggle-panel"> <div> <a href="https://www.dotnetcurry.com/tutorials/typescript">TypeScript</a> <a href="https://www.dotnetcurry.com/tutorials/angularjs">Angular</a> </div> <div> <a href="https://www.dotnetcurry.com/tutorials/jquery-aspnet">jQuery</a> <a href="https://www.dotnetcurry.com/tutorials/nodejs">Node.js</a> </div> <div> <a href="https://www.dotnetcurry.com/tutorials/reactjs">React.js</a> <a href="https://www.dotnetcurry.com/tutorials/backbonejs">Backbone.js</a> </div> <div> <a href="https://www.dotnetcurry.com/tutorials/html5-javascript">HTML5 & JavaScript</a> <a href="https://www.dotnetcurry.com/tutorials/bootstrap-css">Bootstrap & CSS</a> </div> </div> </li> <li> <h3>.NET Desktop</h3> <span class="fa fa-angle-down"></span> <div class="toggle-panel"> <div> <a href="https://www.dotnetcurry.com/tutorials/wpf">WPF</a> <a href="https://www.dotnetcurry.com/tutorials/winforms">WinForms</a> </div> </div> </li> <li> <h3>Interview Questions & Product Reviews</h3> <span class="fa fa-angle-down"></span> <div class="toggle-panel"> <div> <a href="https://www.dotnetcurry.com/tutorials/dotnetinterview">.NET Interview Q&A</a> <a href="https://www.dotnetcurry.com/tutorials/product-articles-review">Product Reviews</a> </div> <div> <a href="https://www.dotnetcurry.com/tutorials/general-programming-topics">General Topics</a> </div> </div> </li> </ul> </div> <div class="sec-title"> <h3><b>JOIN OUR COMMUNITY</b></h3> </div> <div class="side-widget"> <div class="side-social"> <a href="https://www.facebook.com/dotnetcurry"><i class="fa fa-facebook"></i> 50K+ <span>fans</span></a> <a href="https://www.twitter.com/dotnetcurry"><i class="fa fa-twitter"></i> 8K+ <span>followers</span></a> <a href="https://www.dotnetcurry.com/magazine/"><i class="fa fa-envelope"></i> 128K+ <span>subscribers</span></a> </div> </div> <div class="sec-title"> <h3><b>POPULAR ARTICLES</b></h3> </div> <div id="latestart" class="side-widget"> <div> <a id="ctl00_toplat_Repeater1_ctl00_lnkTitle" class="top" href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=1608" style="color:#4A75AD;font-weight:normal;">What's New for ASP.NET Core & Blazor in .NET 9</a> <br /> <br /> <br /> </div> </div> <div id='ban-pos-7-600'> </div> <div id='ban-pos-8-600'> </div> <div class="sec-title-plain"> <h4>Tags</h4> </div> <div class="side-widget"> <div class="tags"> <a href="https://www.dotnetcurry.com/tutorials/aspnet-mvc">ASP.NET MVC</a> <a href="https://www.dotnetcurry.com/tutorials/aspnet-core">ASP.NET Core</a> <a href="https://www.dotnetcurry.com/tutorials/aspnet">ASP.NET</a> <a href="https://www.dotnetcurry.com/tutorials/sharepoint">SharePoint</a> <a href="https://www.dotnetcurry.com/tutorials/patterns-practices">Design Patterns</a> <a href="https://www.dotnetcurry.com/tutorials/csharp">C#</a> <a href="https://www.dotnetcurry.com/tutorials/linq">LINQ</a> <a href="https://www.dotnetcurry.com/tutorials/wpf">WPF</a> <a href="https://www.dotnetcurry.com/tutorials/wcf">WCF</a> <a href="https://www.dotnetcurry.com/tutorials/visualstudio">Visual Studio</a> <a href="https://www.dotnetcurry.com/tutorials/vsts-tfs">VSTS & TFS</a> <a href="https://www.dotnetcurry.com/tutorials/windows-azure">Azure</a> <a href="https://www.dotnetcurry.com/tutorials/entityframework">Entity Framework</a> <a href="https://www.dotnetcurry.com/tutorials/angularjs">Angular.js</a> <a href="https://www.dotnetcurry.com/tutorials/reactjs">React.js</a> <a href="https://www.dotnetcurry.com/tutorials/jquery-aspnet">jQuery</a> <a href="https://www.dotnetcurry.com/tutorials/html5-javascript">JavaScript</a> <a href="https://www.dotnetcurry.com/tutorials/html5-javascript">HTML5</a> <a href="https://www.dotnetcurry.com/tutorials/dotnet-standard-core">.NET Core</a> <a href="https://www.dotnetcurry.com/tutorials/dotnetframework">.NET Framework</a> </div> </div> <div class="sec-title"> <h3><b>JQUERY COOKBOOK</b></h3> </div> <div class="side-widget"> <a href="http://www.jquerycookbook.com"><img src="https://www.dotnetcurry.com/images/books/300x300-jqckbk.png" alt="jQuery CookBook" /></a> </div> </div> </div> </div> <!-- container --> </div> <!-- footer --> <footer class="margin-top-30"> <div class="container"> <div class="footer-head"> <div class="row center-content"> <div class="col-md-2 col-sm-3"> <a href="https://www.dotnetcurry.com"> <img data-src="/img/dnc-logo-tee-trans.png" class="img-responsive lazyload" alt="" /> </a> </div> <div class="col-md-6 col-sm-4"> <p></p> </div> <!--<div class="col-md-4 col-sm-5"> <form class="footer-search"> <input type="search" placeholder="Search"> <button type="submit"><i class="fa fa-search"></i></button> </form> </div>--> </div> </div> <div class="footer-content"> <div class="row"> <div class="col-sm-2"> <h5 class="text-white">Server-Side</h5> <ul class="footer-links"> <li><a href="https://www.dotnetcurry.com/tutorials/aspnet">ASP.NET</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/aspnet-core">ASP.NET Core</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/aspnet-mvc">ASP.NET MVC</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/wcf">WCF</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/sharepoint">SharePoint</a></li> </ul> </div> <div class="col-sm-2"> <h5 class="text-white">Client-side</h5> <ul class="footer-links"> <li><a href="https://www.dotnetcurry.com/tutorials/angularjs">Angular.js</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/reactjs">React.js</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/jquery-aspnet">jQuery</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/backbonejs">Backbone.js</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/html5-javascript">HTML5</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/bootstrap-css">CSS</a></li> </ul> </div> <div class="col-sm-2"> <h5 class="text-white">.NET</h5> <ul class="footer-links"> <li><a href="https://www.dotnetcurry.com/tutorials/csharp">C#</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/visualstudio">Visual Studio</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/vsts-tfs">VSTS & TFS</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/linq">LINQ</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/entityframework">Entity Framework</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/dotnetframework">.NET Framework</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/dotnet-standard-core">.NET Standard & .NET Core</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/wpf">WPF</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/winforms">WinForms</a></li> </ul> </div> <div class="col-sm-2"> <h5 class="text-white">Cloud and Mobile</h5> <ul class="footer-links"> <li><a href="https://www.dotnetcurry.com/tutorials/windows-azure">Microsoft Azure</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/devops">DevOps</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/xamarin">Xamarin</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/powershell">Powershell</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/machine-learning-ai">Machine Learning & AI</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/windows-store">UWP & Windows Store</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/windowsphone">Windows Phone</a></li> </ul> </div> <div class="col-sm-2"> <h5 class="text-white">Skill Up</h5> <ul class="footer-links"> <li><a href="https://www.dotnetcurry.com/tutorials/patterns-practices">Design Patterns</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/software-gardening">Software Gardening</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/dotnetinterview">.NET Interview Q&A</a></li> <li><a href="https://www.dotnetcurry.com/magazine/" class="last">Magazines</a></li> <li><a href="http://www.jquerycookbook.com/">Books</a></li> <li><a href="https://www.dotnetcurry.com/tutorials/product-articles-review">Product Reviews</a></li> </ul> </div> <div class="col-sm-2"> <h5 class="text-white">Follow Us</h5> <ul class="footer-social"> <li><a href="https://www.facebook.com/dotnetcurry">Facebook</a></li> <li><a href="https://www.twitter.com/dotnetcurry">Twitter</a></li> <li><a href="https://github.com/dotnetcurry">Github</a></li> </ul> </div> </div> </div> <div class="footer-bottom"> <div class="row"> <div class="col-sm-6"> <p>&copy; 2007-2023 DotNetCurry.com (A subsidiary of A2Z Knowledge Visuals Pvt. Ltd). All rights reserved.</p> </div> <div class="col-sm-6 text-right"> <ul class="list-inline"> <li><a href="https://www.dotnetcurry.com/Contact.aspx">Contact Us</a></li> <li><a href="https://www.dotnetcurry.com/WriteForUs.aspx">Write For Us</a></li> <li><a href="https://www.dotnetcurry.com/PrivacyPolicy.aspx">Privacy</a></li> <li><a href="https://www.dotnetcurry.com/terms-conditions">Terms</a></li> </ul> </div> </div> </div> </div> </footer> <!-- footer --> </form> <script src="//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js"></script> <script src="/bundles/scriptsmin?v=ztXW8lGCJchjv7iQbaTOZjTpSGfOrLg1lKllrWansXI1"></script> <script src="/bundles/framework?v=yOkBizHgoWwNt4OFd4FauUxu9fucEJ_a4EJrci8uIGA1"></script> <script type="text/javascript"> SyntaxHighlighter.defaults['auto-links'] = false; SyntaxHighlighter.defaults['gutter'] = false; SyntaxHighlighter.defaults['toolbar'] = false; SyntaxHighlighter.all() </script> <script> $(function () { $('.tabHeader').children().first().addClass('current'); $('.tabContent').children().first().addClass('current'); $('.tabHeader li').click(function (e) { e.preventDefault(); $(this).siblings('.current').removeClass('current'); $(this).addClass('current'); $('.tabContent').children('.current').removeClass('current'); $('.tabContent').children().eq($(this).index()).addClass('current'); }); }); </script> <script src="https://ajax.googleapis.com/ajax/libs/webfont/1.5.18/webfont.js"></script> <script> WebFont.load({ google: { families: ['Hind Vadodara:300,400,500,600,700'] } }); </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10