czwartek, 16 lutego 2012

Konwersja IList do DataSet - IList to DataSet

Poniżej funkcja konwertująca Ilist-ę do DataSet-a
Param: IList
Return: DataSet

public static DataSet ConvertToDataSet<T>(IList<T> list)
{
  if (list == null || list.Count <= 0)
  {
   return null;
  }
  DataSet ds = new DataSet();
  DataTable dt = new DataTable(typeof(T).Name);
  DataColumn column;
  DataRow row;

  System.Reflection.PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);

  foreach (T t in list)
  {
   if (t == null)
   {
     continue;
   }

   row = dt.NewRow();
   for (int i = 0, j = myPropertyInfo.Length; i < j; i++)
   {
    System.Reflection.PropertyInfo pInfo = myPropertyInfo[i];
    string name = pInfo.Name;
    if (dt.Columns[name] == null)
    {
     try
    {
     column = new DataColumn(name, pInfo.PropertyType);
    }
    catch (NotSupportedException)
    {
     column = new DataColumn(name, Nullable.GetUnderlyingType(pInfo.PropertyType));
    }
    catch (Exception)
    {
     column = new DataColumn(name, typeof(object));
    }

    dt.Columns.Add(column);
    }
    row[name] = pInfo.GetValue(t, null);
   }
   dt.Rows.Add(row);
  }
 ds.Tables.Add(dt);
 return ds;
}

środa, 4 stycznia 2012

Domyślny parametr funkcji

Czasami zachodzi potrzeba ustawienie domyślnego parametru przekazywanego funkcji

Aby to wykonać należy sprawdzić czy parametr został zdefiniowany przy przekazaniu np:

function ShowSelected(bCategory)
{
   bCategory = typeof(bCategory) != 'undefined' ? bCategory : true;
...
}

w tym przypadku domyślny parametr jest typu bool i jeżeli nie został przekazany to domyślną wartością jest true;

środa, 8 czerwca 2011

Jak wyświetlić ilość dodanych dzisiaj postów na blogu

W sekcji Head szablonu Blogger-a dodajemy funkcję

<script type="text/javascript" >

//<![CDATA[
 function GetCountPostToday(json){
    var currDate = new Date();
    var CountToday = 0;
    var date = currDate.getFullYear()+'-'+((currDate.getMonth()+1)<10 ? '0'+(currDate.getMonth()+1) : (currDate.getMonth()+1))+'-'+(currDate.getDate()<10 ? '0'+currDate.getDate():currDate.getDate()); 
    for (var i=1; i<=json.feed.entry.length ; i++)
    {
         if (json.feed.entry[i].published.$t.substring(0,10)==date ) CountToday ++; else break;    
    }        
     document.write(CountToday);
   }

//]]></script>


W szablonie wywołujemy skrypt w miejscu w którym ma być wyświetlona ilość postów publikowanych tego dnia

<script src="http://progbis.blogspot.com/feeds/posts/default?alt=json-in-script&start-index=1&max-results=100&callback=GetCountPostToday"></script>


Pamiętają o zmianie adresu bloga :)

Rozwiązanie to ma ograniczenie do 100 postów dziennie. Zmieniając parametr  max-results określimy ilość sprawdzanych postów (max 500)

Jak używać JavaScript w szablonie Bloggera

Aby skorzystać ze skryptu JavasScript w szablonie bloggera, należy skrypt odpowiednio poprzedzić sekcją. Pamiętając o umieszczeniu definicji skryptu w sekcji HEAD
<script type="text/javascript">
//<![CDATA[</code>
    ...skrypt...
i zakończyć sekwencją znaków 
//]]></script>

czwartek, 26 maja 2011

Jak ustawić przezroczystość elementów w css


Przezroczystość elementów na stronie w css najlepiej pokazać na przykładzie.
Oczywiście jest to zależne od przeglądarki.

Test bez użycia przezroczystość

Test z użyciem przezroczystość


<style type="text/css">
  .test1 { opacity: .5; }  //firefox, mozilla,etc.
  .test2 { filter: alpha(opacity=50); } //IE 6-7
  .test3 { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; } //IE8-9
</style>


Do ustawienie działania w różnych wersjach IE zachowujemy kolejność

-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
filter: alpha(opacity=50);

piątek, 20 maja 2011

Dynamiczna, alfabetyczna lista postów blogu jako oddzielna strona

Aby utworzyć dynamiczną, alfabetyczną listę postów na blogu należy (krok po kroku):
  1. dodać widget stron do bloggera
  2. utworzyć na blogerze oddzielną stronę np: Spis alfabetyczny
  3. wprowadzić odpowiedni kod funkcji javascript, korzystający z formatu JSON
  4. wstawić skrypt pobierający posty z bloga.
  5. wykonać skrypt wyświetlający listę
A więc do dzieła. Krok 1,2 pominę gdyż chyba zrozumiałe i pokaże krok 3 i 4

Krok 3
Tworzymy skrypt js jako treść postu, w tym wypadku strony

<script style="text/javascript"> 


Definiujemy tablicę, do której będziemy dodawać posty
 var tabentry = new Array();

Teraz funkcję zwrotną odczytującą posty w formacie JSON i zapisującą posty do tablicy
   function ListaPostow(json) {     
     i=0;
     while (entry = json.feed.entry[i++])
     {
        tabentry.length++;
        tabentry[tabentry.length-1] = entry;
     }    
   }  


Dodajemy funkcję sortującą tablicę postów po tytułach postów
function SortByTitle(a,b)
   {
     if (b.title.$t==a.title.$t) return 0;
     if (a.title.$t>b.title.$t) { return 1; }
     else return -1;
   }


Na koniec funkcję, która wyświetli nam posortowaną listę postów na stronie.
   function ShowListEntry() {
     tabentry.sort(SortByTitle); //sortuj tablicę
     document.write('<table>');
     document.write('<tr><td colspan="2"><ul><h1>Lista alfabetyczna</h1></td></tr>');
    
     for (var i = 0 ; i<tabentry.length ; i++)
     {
       document.write('<tr><td style="padding-right:10px;"><li>');
       var posturl;   
       for (var k = 0; k < tabentry[i].link.length; k++) {
          if (tabentry[i].link[k].rel == 'alternate') {
            posturl = tabentry[i].link[k].href;
             break;
         }
       }
       document.write('<a href="'+posturl+'">');
       document.write(tabentry[i].title.$t);
       document.write('</a></li></td>');
       document.write('<td>(<i>'+ tabentry[i].category[0].term+')</i></td></tr>');
     }
     document.write('</ul></table>');


W tej funkcji wyświetlam listę w postaci tabeli wraz z nazwami przypisanych etykiet do postów.

Zamykamy znacznik skryptu
</script>

Krok 4
Wykonujemy skrypt pobierający listę postów oraz wyświetlamy ją na stronie:

<script src="http://progbis.blogspot.com/feeds/posts/default?alt=json-in-script&start-index=1&max-results=500&callback=ListaPostow"></script>

Pamiętając o podmianie adresu swojego bloga.

Skrypt ten działa do 500 postów, gdyż tyle jednorazowo można pobrać. Jeśli macie więcej to należy odpowiednio dopisać.

<script src="http://progbis.blogspot.com/feeds/posts/default?alt=json-in-script&start-index=501&max-results=500&callback=ListaPostow"></script>


i więcej...
<script src="http://progbis.blogspot.com/feeds/posts/default?alt=json-in-script&start-index=1001&max-results=500&callback=ListaPostow"></script><script>ShowListEntry();</script>

Krok 5
Wykonujemy funkcję, która wyświetli nam posortowaną listę postów
<script>ShowListEntry();</script>

Jak to działa? Sprawdźcie listę wg kategorii na moim blogu
Więcej informacji o formacie JSON i postów bloga znajdziesz pod adresem http://beautifulbeta.wikidot.com/json-feeds

czwartek, 19 maja 2011

Jak wyświetlić ilość postów i komentarzy na blogu

Jeśli chcesz aby na twoim blogu pojawiła się informacja o tym ile zmieściłeś postów oraz ile dodano komentarzy, należy posłużyć się javascipt-em i formatem JSON.
Skrypt najlepiej umieścić w widgecie, w którym informacji o ilości postów czy komentarzy będzie wyświetlana.

<script style="text/javascript">
function numposts(json) {
document.write('Ten blog opublikował ' + json.feed.openSearch$totalResults.$t + ' postów');
}
function numcomments(json) {
document.write(' oraz ' + json.feed.openSearch$totalResults.$t + ' komentarzy');
}</script>


Po czym umieścić w miejscu w którym wyświetlić informację wywołanie skryptu

<script src="http://progbis.blogspot.com/feeds/posts/default?alt=json-in-script&callback=numposts"></script><script src="http://progbis.blogspot.com/feeds/comments/default?alt=json-in-script&callback=numcomments"></script>

pamiętając o podmianie adresu twojego bloga.

czwartek, 28 kwietnia 2011

Richtextbox problem różnych czcionek w c# Net

Problem występuje w sytuacji, gdy zaczytujesz z pliku lub wklejasz ze schowka zaznaczony fragment tekstu.
W richtextbox-ie wyświetlane są różne czcionki o różnych wielkościach znaków, szczególnie przy polskich znaków.
Aby temu zapobiec należy bezpośrednio w designerze dopisać linijkę przed ustawieniem fontów.


this.richTextBox1.LanguageOption = System.Windows.Forms.RichTextBoxLanguageOptions.AutoKeyboard;

i problem znika

piątek, 15 kwietnia 2011

Problem z toolStrip i ImageList w .Net c#

Problem jest następujący. We właściwościach komponentu toolStrip brakuje właściwości ImageList. Jednakże właściwość ta wciąż dostępna jest z poziomu kodu. Wystarczy najlepiej zaraz po inicjacji formy w konstruktorze dodać powiązanie np:
this.toolStrip1.ImageList = imageList1;

Teraz można przy pomocy indeksów ustawiać odpowiednie ikony np:
this.toolStripSplitButton1.ImageIndex = 0; gdzie 0 to index z ImageList

Inny problem jest to, że ustawienie indeksu dla pod menu "ToolStripMenuItem" nie powoduje wyświetlenie ikony. Można zastosować przypisanie do właściwości Image odpowiednią ikonę z ImageList np:
this.ekportToolStripMenuItem.Image = imageList1.Images[0];

poniedziałek, 4 kwietnia 2011

JavaScript jak sprawdzić czy funkcja istnieje

W JavaScript można wykonać to przynajmniej na 2 sposoby:

if(typeof (window.myFunction) == ‘function’) {
// funkcja istnieje więc możemy ją wywołać
myFunction(’foo’, ‘bar’);
}


lub nawet prościej

if(myFunction) { //funkcja istnieje
myFunction(‘foo’, ‘bar’);
}

MySQL i MSSQL Multi Insert

W MySQL realizację wielu insertów (multi insert) wykonujemy w sposób:

insert into `mytable` (fname, lname, address) values
("john", "doe", "123 some st"),
("jane", "doe", "456 other st")


W MSSQL-u już tak pięknie nie jest, ale możemy to samo uzyskać w ten sposób:

insert into `mytable` (fname, lname, address)
Select 'john','doe','123 some st' union all
Select 'jane','doe','456 other st';

MSSQL jak sprawdzić czy tabela istnieje?

Sprawdzenie istnienia tabeli w MSSQL-u jest troszkę bardziej skomplikowane niż w MySQL. W MySQL można wykonywać skrypty bezpośrednio sprawdzając czy tabel istnieje np:
DROP TABLE IF EXISTS table_name;
W MSSQL możemy to zrobić w ten sposób:
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 'table_name')
DROP TABLE 'table_name'
Innym rozwiązaniem jest sprawdzenie czy tabela istnieje w obiektach systemowych
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[table_name]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE 'table_name'
Jeszcze innym sposobem jest sprawdzenie czy istnieje obiekt, w tym przypadku nasza tabela.
IF OBJECT_ID('[dbo].[table_name]') IS NOT NULL
DROP TABLE 'table_name'

piątek, 1 kwietnia 2011

Utworzenie źródła ODBC DSN w InstallShield do serwera MSSQL

Funkcja tworzy nowe źródło ODBC DSN z ewentualnym usunięciem źródła starego
function BOOL SetNewODBC(sNewZrodlo,sOldZrodlo, szDataBase, szServer, szUser, nVersionSQL)
string RegPath,sKey,sValue,sDriver,sServer,sUser,sDataBase,sClass,sData;     
number nSize,nType,nResult,nDriver,nServer,nUser,nDataBase;
number nsDriver,nsServer,nsUser,nsDataBase,nsDataSource;
begin  
  RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);          
  RegPath="SOFTWARE\\ODBC\\ODBC.INI\\"+sNewZrodlo;
  if (RegDBKeyExist(RegPath)<0) then 
   RegPath="SOFTWARE\\ODBC\\ODBC.INI\\"+sOldZrodlo; 
   if (RegDBKeyExist(RegPath)==1) then     
    sDataBase="";                  
    sValue="Driver";           
    sKey = "SOFTWARE\\ODBC\\ODBC.INI\\"+sOldZrodlo;
    nDriver = RegDBGetKeyValueEx( sKey, sValue, nType, sDriver, nSize );                  
    sValue="Server";                                                                    
    nServer = RegDBGetKeyValueEx( sKey, sValue, nType, sServer, nSize );                  
    sValue="LastUser";                                                                    
    nUser = RegDBGetKeyValueEx( sKey, sValue, nType, sUser, nSize );                  
    sValue="Database";
    nDataBase=RegDBGetKeyValueEx( sKey, sValue, nType, sDataBase, nSize );                  
    
    if ((nDriver==0)&&(nServer==0)&&(nUser==0)) then                        
     sClass="";                                        
     sKey="SOFTWARE\\ODBC\\ODBC.INI\\"+sNewZrodlo;         
     RegPath="SOFTWARE\\ODBC\\ODBC.INI";
     if (RegDBCreateKeyEx(sKey, sClass) < 0) then 
      WriteLog(1,"- nie można utworzyć źrodła ODBC do "+sNewZrodlo);      
     else
      //Zapis wartosci do nowego zrodla                                                       
      WriteLog(1,"- Utworzono klucz ODBC \""+sNewZrodlo+"\"");      
      nType=REGDB_STRING;     
      sKey="SOFTWARE\\ODBC\\ODBC.INI\\"+sNewZrodlo;
      nsDriver = RegDBSetKeyValueEx ( sKey, "Driver", nType, sDriver, nSize ); 
      nsServer = RegDBSetKeyValueEx ( sKey, "Server", nType, sServer, nSize ); 
      nsUser = RegDBSetKeyValueEx ( sKey, "LastUser", nType, sUser, nSize ); 
     if (StrLength(sDataBase)>0) then                            
      sDataBase=szDataBase;
      nsDataBase = RegDBSetKeyValueEx ( sKey, "Database", nType, sDataBase, nSize ); 
     endif;           
     if (nsDriver==0) then WriteLog(2,"- utworzono klucz 'Driver' wartość \""+sDriver+"\"");
          else WriteLog(2,"- nie utworzono wartość klucza 'Driver'"); endif;
     if (nsServer==0) then WriteLog(2,"- utworzono klucz 'Server' wartość \""+sServer+"\"");
          else WriteLog(2,"- nie utworzono wartość klucza 'Server'"); endif;     
     if (nsUser==0)   then WriteLog(2,"- utworzono klucz 'LastUser' wartość \""+sUser+"\"");
          else WriteLog(2,"- nie utworzono wartość klucza 'LastUser'"); endif;          
     if ((StrLength(sDataBase)>0)&&(nsDataBase==0)) then WriteLog(2,"- utworzono klucz 'Database' wartość \""+sDataBase+"\"");    
          else WriteLog(2,"- nie utworzono wartość klucza 'Database'");     
     endif;              
     
     //Utworzenie wpisu do ODBC Data Sources 
     sKey="SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources";
     nsDataSource = RegDBGetKeyValueEx ( sKey, sOldZrodlo, nType, sData, nSize ); 
     if (nsDataSource==0) then
      if (RegDBSetKeyValueEx ( sKey, sNewZrodlo, nType, sData, nSize )==0) then
       WriteLog(2,"- utworzono wartość klucza ODBC Data Sources do "+sNewZrodlo);
      else                                                                       
       WriteLog(2,"- nie utworzono wartość klucza ODBC Data Sources do "+sNewZrodlo);
      endif;;       
     endif;
     
     endif;
     
    else //Brak wszystkich wymaganych danych do utworzenia zrodla ODBC 
     WriteLog(1,"Brak wszystkich wymaganych danych do utworzenia zrodla ODBC  ");   
     //Usuwam zrodla 
    endif;   
  else  //brak sOldZrodla - stworz
      sClass="";                                        
     sKey="SOFTWARE\\ODBC\\ODBC.INI\\"+sNewZrodlo;         
     RegPath="SOFTWARE\\ODBC\\ODBC.INI";
     if (RegDBCreateKeyEx(sKey, sClass) < 0) then 
      WriteLog(1,"- nie można utworzyć źrodła ODBC do "+sNewZrodlo);      
     else
      //Zapis wartosci do nowego zrodla                                                       
      WriteLog(1,"- Utworzono klucz ODBC do "+sNewZrodlo);      
      nType=REGDB_STRING;     
      sKey="SOFTWARE\\ODBC\\ODBC.INI\\"+sNewZrodlo;        
      
      WriteLog(1,"- wyszukiwanie sterownika SQL");
      if (nVersionSQL<90) then                             
       
        if (Is(FILE_EXISTS,WINSYSDIR^"sqlsrv32.dll")) then sDriver = WINSYSDIR^"sqlsrv32.dll";
        elseif (Is(FILE_EXISTS,WINSYSDIR64^"sqlsrv32.dll")) then sDriver = WINSYSDIR64^"sqlsrv32.dll";
        endif;                 
        
      elseif (nVersionSQL>=90)&&(nVersionSQL<100) then
       
        if (Is(FILE_EXISTS,WINSYSDIR^"sqlncli.dll")) then sDriver = WINSYSDIR^"sqlncli.dll";
        elseif (Is(FILE_EXISTS,WINSYSDIR64^"sqlncli.dll")) then sDriver = WINSYSDIR64^"sqlncli.dll";
        endif;                   
      
      elseif (nVersionSQL>=100) then
           if (Is(FILE_EXISTS,WINSYSDIR^"sqlncli10.dll")) then sDriver = WINSYSDIR^"sqlncli10.dll";
        elseif (Is(FILE_EXISTS,WINSYSDIR64^"sqlncli10.dll")) then sDriver = WINSYSDIR64^"sqlncli10.dll";
        elseif (Is(FILE_EXISTS,WINSYSDIR^"sqlncli.dll")) then sDriver = WINSYSDIR^"sqlncli.dll";
        elseif (Is(FILE_EXISTS,WINSYSDIR64^"sqlncli.dll")) then sDriver = WINSYSDIR64^"sqlncli.dll";
        endif;                   
       
      endif;                                      
      WriteLog(2,"- sterownik SQL to \""+sDriver+"\"");
      
      nsDriver = RegDBSetKeyValueEx ( sKey, "Driver", nType, sDriver, nSize ); 
      nsServer = RegDBSetKeyValueEx ( sKey, "Server", nType, szServer, nSize ); 
      nsUser = RegDBSetKeyValueEx ( sKey, "LastUser", nType, szUser, nSize ); 
     if (StrLength(szDataBase)>0) then                                  
      nsDataBase = RegDBSetKeyValueEx ( sKey, "Database", nType, szDataBase, nSize ); 
     endif;           
     if (nsDriver==0) then WriteLog(2,"- utworzono klucz 'Driver' wartość \""+sDriver+"\"");
          else WriteLog(2,"- nie utworzono wartość klucza 'Driver' = \""+sDriver+"\""); endif;
     if (nsServer==0) then WriteLog(2,"- utworzono klucz 'Server' wartość \""+szServer+"\"");
          else WriteLog(2,"- nie utworzono wartość klucza 'Server' = \""+szServer+"\""); endif;     
     if (nsUser==0)   then WriteLog(2,"- utworzono klucz 'LastUser' wartość \""+szUser+"\"");
          else WriteLog(2,"- nie utworzono wartość klucza 'LastUser'"); endif;          
     if ((StrLength(szDataBase)>0)&&(nsDataBase==0)) then WriteLog(2,"- utworzono klucz 'Database' wartość \""+szDataBase+"\"");    
                    else WriteLog(2,"- nie utworzono wartość klucza 'Database' = \""+szDataBase+"\"");    
     endif;              
     
     //Utworzenie wpisu do ODBC Data Sources 
     sKey="SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources";            
     if StrFind(sDriver,"sqlsrv32.dll")>=0 then sData = "SQL Server"; endif;
     if StrFind(sDriver,"sqlncli.dll")>=0 then sData = "SQL Native Client"; endif;
     if StrFind(sDriver,"sqlncli10.dll")>=0 then sData = "SQL Server Native Client 10.0"; endif;
     /*
     if (nVersionSQL<90) then sData = "SQL Server"; 
     elseif (nVersionSQL>=90)&&(nVersionSQL<100) then sData = "SQL Native Client";
     elseif (nVersionSQL>=100) then sData = "SQL Server Native Client 10.0";
     endif;     
     */
     if StrLength(sData)>0 then
      if (RegDBSetKeyValueEx ( sKey, sNewZrodlo, nType, sData, nSize )==0) then
       WriteLog(2,"- utworzono wartość klucza ODBC Data Sources do "+sNewZrodlo+ " na \""+sData+"\"");
      else                                                                       
       WriteLog(2,"- nie utworzono wartość klucza ODBC Data Sources do "+sNewZrodlo+ " na \""+sData+"\"");
      endif;  
     else
      WriteLog(1,"Błąd rozpoznania sterownika SQL. Nie można utworzyć ODBC Data Sources do \""+sNewZrodlo+ "\""); 
     endif;
    
    endif;     
     
   endif;        
   
  else
   WriteLog(2,"Istnieje klucz ODBC "+sNewZrodlo); 
  endif;
end;