Both DataSource and DataSourceID are defined on ‘GridView1’. Remove one definition. – Bind multiple datasources to a gridview control

Both DataSource and DataSourceID are defined on ‘GridView1’.  Remove one definition.

OK, so this is the message that you get most of the times when you try to bind your gridview or any other bindable controls, to multiple DataSources.

 It happens most of the times when you bind your GridView control to an ObjectDataSouce or SqlDataSource on the design surface and then you try to bind the same GridView in code behind using the manual coding and sometimes it becomes necessary to do so in the scenarios of searching and manual paging etc.

(Binding to ObjectDataSource)

 ObjectDataSource Binding

(Binding to manual DataSource)

GridView1.DataSource = null;
GridView1.DataSource = myDataTable;
GridView1.DataBind();

This is not going to solve the problem, the simples workaround is to set the DataSourceID to null.

GridView1.DataSourceID = null;
GridView1.DataSource = dt;
GridView1.DataBind();

now this is going to work perfectly fine but DataGrid required a page developer to write custom code to handle simple operations such as paging, sorting, editing or deleting data, the GridView control can automatically handle these operations provided its bound data source control supports these capabilities and we know that this kind of custom binding will kill any chances to automate your GridView to handle all these operations automatically.

Simplest way to resolve this issue is to display your required data to the client and then bind back the GridView to your original datasouce by setting the DataSourceID to null again. That will bring back all your automation functionality back to the GridView.

Cheers –


2 Steps Solutions 
Re-engineering your business

17 Responses to “Both DataSource and DataSourceID are defined on ‘GridView1’. Remove one definition. – Bind multiple datasources to a gridview control”

  1. MadhU Says:

    Thanks Dude….
    This is one common irritating msg tat I’m getting..
    Cheers

  2. yogi Says:

    that was great!!! thnx

  3. nsrikanth Says:

    Both DataSource and DataSourceID are defined on ‘GridView1′. Remove one definition.

    thanq fr help’g me regarding ths query…

  4. Haider bilal Says:

    thankx alot it really works for me

  5. Simon Says:

    Thanks, jibrankhan, just the title of your article fixed my issue!

  6. ying Says:

    can someone please explain how to do this? thanks

  7. lila Says:

    Can you show us using the code above how to modify the code to get the automation back?

  8. jibrankhan Says:

    Once you specifiy the ObjectDataSource back as the DataSource for your GridView, AutoEventHandlers will work fine again without writing any other piece of code.

    GridView1.DataSourceID = null;
    GridView1.DataSource = ObjectDataSource1;
    GridView1.DataBind();

    Hope it helps.

  9. Anshul Shukla Says:

    thank u so much!!!!!!!!!!!!!

  10. ahmad Says:

    I appreciate. very helpful

  11. arpit Says:

    Thanks a lot. That helped.

  12. Vidhi Says:

    Thanks…Your very first solution helped me….My problem is solved…Thanks again.

  13. Antony Says:

    Dude you are simply amazing! Thank you very much…

  14. Fredy Says:

    It doesn´t works for me, there are another posible solution. Iam Using Entities

  15. Abdullah Says:

    Jibran bhai

    i have done as below but its giving error when i m deleting data
    my code behing Search Button to search data

    “string SP=”SearchBrand”;//store procedure name
    DataTable dt= sr.ExecSP(SP, txtSearch.Text);//execute sp and return data in datatable
    GVBrand.DataSourceID = string.Empty;
    GVBrand.DataSource = dt;
    GVBrand.DataBind();
    GVBrand.DataSourceID = string.Empty;
    GVBrand.DataSource = dbBrand;
    GVBrand.DataBind();”

    and its giving this error
    Sys.WebForms.PageRequestManagerServerErrorException: The GridView ‘GVBrand’ fired event RowDeleting which wasn’t handled.

    plz help me as soon as possible as i have to deploy my application tomorrow

    • jibrankhan Says:

      Hi Abdullah – I don’t understand why would you bind the same control twice in the same piece of code?

      Anyway, can you paste in the entire code? I’m not sure if you are using the custome written event handler for deleting rows or the one used through the data source?

      What type of data source are you using?


Leave a comment