public NDatasourceReferenceCollection LookupDataSourceReferences(string itemPath)
        {
            NDatasourceReferenceCollection dataSourcePaths = new NDatasourceReferenceCollection();

            DataSource[] dataSources = this.ReportingServiceClient.GetItemDataSources(itemPath);
            foreach (DataSource ds in dataSources)
            {
                DataSourceReference refDS = ds.Item as DataSourceReference;
                if (refDS != null)
                {
                    NDatasourceReference nRef = new NDatasourceReference(ds.Name, refDS.Reference);
                    dataSourcePaths.Add(nRef);
                }
            }

            return dataSourcePaths;
        }
        public void AssignDataSourceReferences(string itemPath, NDatasourceReferenceCollection dataSourceReferences)
        {
            List<DataSource> dataSourceList = new List<DataSource>();

            ///////////////////////////////////////////////////////////////////////////////////////
            // Note: According to documentation, only datasources that are being modified need to
            //       be included.
            ///////////////////////////////////////////////////////////////////////////////////////

            // Add the links.
            foreach (NDatasourceReference modifiedReference in dataSourceReferences)
            {
                DataSourceReference newDataSourceReference = new DataSourceReference();
                newDataSourceReference.Reference = modifiedReference.DatasourcePath;

                DataSource newDataSource = new DataSource();
                newDataSource.Name = modifiedReference.Name;
                newDataSource.Item = newDataSourceReference;

                dataSourceList.Add(newDataSource);
            }

            DataSource[] dataSources = new DataSource[dataSourceList.Count];
            dataSourceList.CopyTo(dataSources);

            this.ReportingServiceClient.SetItemDataSources(itemPath, dataSources);
        }