Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      The Ultimate Guide to Node.js Development Pricing for Enterprises

      July 29, 2025

      Stack Overflow: Developers’ trust in AI outputs is worsening year over year

      July 29, 2025

      Web Components: Working With Shadow DOM

      July 28, 2025

      Google’s new Opal tool allows users to create mini AI apps with no coding required

      July 28, 2025

      5 preinstalled apps you should delete from your Samsung phone immediately

      July 30, 2025

      Ubuntu Linux lagging? Try my 10 go-to tricks to speed it up

      July 30, 2025

      How I survived a week with this $130 smartwatch instead of my Garmin and Galaxy Ultra

      July 30, 2025

      YouTube is using AI to verify your age now – and if it’s wrong, that’s on you to fix

      July 30, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      Time-Controlled Data Processing with Laravel LazyCollection Methods

      July 30, 2025
      Recent

      Time-Controlled Data Processing with Laravel LazyCollection Methods

      July 30, 2025

      Create Apple Wallet Passes in Laravel

      July 30, 2025

      The Laravel Idea Plugin is Now FREE for PhpStorm Users

      July 30, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      New data shows Xbox is utterly dominating PlayStation’s storefront — accounting for 60% of the Q2 top 10 game sales spots

      July 30, 2025
      Recent

      New data shows Xbox is utterly dominating PlayStation’s storefront — accounting for 60% of the Q2 top 10 game sales spots

      July 30, 2025

      Opera throws Microsoft to Brazil’s watchdogs for promoting Edge as your default browser — “Microsoft thwarts‬‭ browser‬‭ competition‬‭‬‭ at‬‭ every‬‭ turn”

      July 30, 2025

      Activision once again draws the ire of players for new Diablo Immortal marketing that appears to have been made with generative AI

      July 30, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»News & Updates»CodeSOD: Gridding My Teeth

    CodeSOD: Gridding My Teeth

    June 12, 2025

    Dan‘s co-workers like passing around TDWTF stories, mostly because seeing code worse than what they’re writing makes them feel less bad about how often they end up hacking things together.

    One day, a co-worker told Dan: “Hey, I think I found something for that website with the bad code stories!”

    Dan’s heart sank. He didn’t really want to shame any of his co-workers. Fortunately, the source-control history put the blame squarely on someone who didn’t work there any more, so he felt better about submitting it.

    This is another ASP .Net page, and this one made heavy use of GridView elements. GridView controls applied the logic of UI controls to generating a table. They had a page which contained six of these controls, defined like this:

    <asp:GridView ID="gvTaskMonth1" runat="server" CssClass="leadsGridView" AutoGenerateColumns="False" OnRowDataBound="gvTaskMonth1_RowDataBound"> ... </asp:GridView>
    
    <asp:GridView ID="gvTaskMonth2" runat="server" CssClass="leadsGridView" AutoGenerateColumns="False" OnRowDataBound="gvTaskMonth1_RowDataBound"> ... </asp:GridView>
    
    <asp:GridView ID="gvTaskMonth3" runat="server" CssClass="leadsGridView" AutoGenerateColumns="False" OnRowDataBound="gvTaskMonth1_RowDataBound"> ... </asp:GridView>
    

    The purpose of this screen was to display a roadmap of coming tasks, broken up by how many months in the future they were. The first thing that leaps out to me is that they all use the same event handler for binding data to the table, which isn’t in-and-of-itself a problem, but the naming of it is certainly a recipe for confusion.

    Now, to bind these controls to the data, there needed to be some code in the code-behind of this view which handled that. That’s where the WTF lurks:

    /// <summary>
    /// Create a roadmap for the selected client
    /// </summary>
    
    private void CreateRoadmap()
    {
    	for (int i = 1; i < 7; i++)
    	{
    		switch (i)
    		{
    			case 1:
    				if (gvTaskMonth1.Rows.Count > 0)
    				{
    					InsertTasks(gvTaskMonth1, DateTime.Parse(txtDatePeriod1.Text), "1");
    				}
    				break;
    			case 2:
    				if (gvTaskMonth2.Rows.Count > 0)
    				{
    					InsertTasks(gvTaskMonth2, DateTime.Parse(txtDatePeriod2.Text), "2");
    				}
    				break;
    			case 3:
    				if (gvTaskMonth3.Rows.Count > 0)
    				{
    					InsertTasks(gvTaskMonth3, DateTime.Parse(txtDatePeriod3.Text), "3");
    				}
    				break;
    			case 4:
    				if (gvTaskMonth4.Rows.Count > 0)
    				{
    					InsertTasks(gvTaskMonth4, DateTime.Parse(txtDatePeriod4.Text), "4");
    				}
    				break;
    			case 5:
    				if (gvTaskMonth5.Rows.Count > 0)
    				{
    					InsertTasks(gvTaskMonth5, DateTime.Parse(txtDatePeriod5.Text), "5");
    				}
    				break;
    			case 6:
    				if (gvTaskMonth6.Rows.Count > 0)
    				{
    					InsertTasks(gvTaskMonth6, DateTime.Parse(txtDatePeriod6.Text), "6");
    				}
    				break;
    		}
    	}
    }
    

    Ah, the good old fashioned loop-switch sequence anti-pattern. I understand the motivation: “I want to do the same thing for six different controls, so I should use a loop to not repeat myself,” but then couldn’t quite figure out how to do that, so they just repeated themselves, but inside of a loop.

    The “fix” was to replace all of this with something more compact:

    	private void CreateRoadmap()
    	{
    		InsertTasks(gvTaskMonth1, DateTime.Parse(txtDatePeriod1.Text), "1");
    		InsertTasks(gvTaskMonth2, DateTime.Parse(txtDatePeriod2.Text), "2");
    		InsertTasks(gvTaskMonth3, DateTime.Parse(txtDatePeriod3.Text), "3");
    		InsertTasks(gvTaskMonth4, DateTime.Parse(txtDatePeriod4.Text), "4");
    		InsertTasks(gvTaskMonth5, DateTime.Parse(txtDatePeriod5.Text), "5");
    		InsertTasks(gvTaskMonth6, DateTime.Parse(txtDatePeriod6.Text), "6"); 
    	}
    

    That said, I’d recommend not trying to parse date times inside of a text box inside of this method, but that’s just me. Bubbling up the inevitable FormatException that this will generate is going to be a giant nuisance. It’s likely that they’ve got a validator somewhere, so it’s probably fine- I just don’t like it.

    [Advertisement]
    Keep the plebs out of prod. Restrict NuGet feed privileges with ProGet. Learn more.

    Source: Read More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleFlaws in Weidmueller IE-SR-2TX Routers Allow Remote Root Access!
    Next Article Schemes – create syntax highlighting schemes

    Related Posts

    News & Updates

    5 preinstalled apps you should delete from your Samsung phone immediately

    July 30, 2025
    News & Updates

    Ubuntu Linux lagging? Try my 10 go-to tricks to speed it up

    July 30, 2025
    Leave A Reply Cancel Reply

    For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

    Continue Reading

    Connect Amazon Bedrock Agents with Amazon Aurora PostgreSQL using Amazon RDS Data API

    Databases

    CVE-2025-7667 – WordPress Restrict File Access CSRF Vulnerability

    Common Vulnerabilities and Exposures (CVEs)

    Learn React in your Browser – freeCodeCamp Full Stack Curriculum Mid-2025 Update

    Development

    CVE-2025-6621 – TOTOLINK CA300-PoE Os Command Injection Vulnerability

    Common Vulnerabilities and Exposures (CVEs)

    Highlights

    News & Updates

    Satya Nadella says company layoffs have been “weighing heavily” on him, which arrived despite the “objective measure” that “Microsoft is thriving” — and more layoffs could be on the way

    July 25, 2025

    Satya Nadella issued a statement addressing Microsoft’s recent layoffs. The company has been criticized for…

    National University of Singapore Researchers Introduce Dimple: A Discrete Diffusion Multimodal Language Model for Efficient and Controllable Text Generation

    May 29, 2025

    CVE-2025-6315 – “Code-projects Online Shoe Store SQL Injection Vulnerability”

    June 20, 2025

    Will Borderlands 4 have cross-play?

    April 28, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.