Tagi na forum.

Windows 14205 SQL Server 2132
sieci 6796 Windows XP 1921
SQL 6578 Outlook 1838
SBS 3868 Uprawnienia 1777
Windows 2003 2781 IIS 1636
Windows Server 2588 Office 1516
DNS 2315 Skrypt 1499

pokaż wszystkie tagi na forum

DataGridView i zmiana typu kolumny

siwanski 2011-05-03 19:16:04
0
avatar
 
 
Witam!Chcę wyswietlić w DataGridView tabele, gdzie jedna z kolumn zawiera pliki różnego rodzaju. W tej chwili napisałem sobie klasę z zapytaniem Linq wyświetlającym daną kolumnę, którą podpinam do istniejącego DataGridView, na której ma byc to wyświetlane. sposób taki jednak jest mało efektywny bo w polach kolumny która zawiera obrazki albo pliki .pdf, są wyświetlane tylko początkowe piksele licząc od lewego górnego rogu obrazka, czyli wsp. (0,0) - w przypadku obrazka, a w przypadku pliku pdf zaraz po wyświetleniu tabeli wyskakuje komunikat o błędzie DataGridView ze względu na niezgodność wyświetlenia typu, tyle że nie mogę sobie pozwolic na włączenie AutoSize w tym DataGridView, bo tabela zrobiła by się bardzo nieczytelna w przypdaku dużej ilości rekordów.Myslę, że najlepiej by było zastąpić pola w tej kolumnie buttonami albo linkami do znajdującego sie pod nim pliku, aby mozna było go ściągnąć, ale problem w tym że VS 2010 nie przyjmuje tworzenia nowych kolumn z kodu w obrębie istniejącego DataGridView (można tylko zmieniać jego właściwości :/)Miejsce gdzie w pliku nazwa.Designer.cs powinna byc zdefiniowana ta kolumna wygląda tak:



[Kod]
//
// dataGridView1
//
this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Location = new System.Drawing.Point(12, 12);
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.ReadOnly = true;
this.dataGridView1.Size = new System.Drawing.Size(793, 351);
this.dataGridView1.TabIndex = 0;

//this.dataGridViewButtonColumnSkan = new System.Windows.Forms.DataGridViewButtonColumn();
//this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[]
//{
// this.dataGridViewButtonColumnSkan,
//});




klasa wyświetlająca:


[Kod]
class ClassShowBadania
{
public static BindingSource getStandardBindingSource()
{
BudSystemEntities bazaBudSystem = new BudSystemEntities();
BindingSource bindingSource = new BindingSource();
bindingSource.DataSource =
from badanie in bazaBudSystem.Badania
select new
{
Nazwa = badanie.nazwa,
Numer = badanie.numer,
Imię = badanie.Pracownicy.imie,
Nazwisko = badanie.Pracownicy.nazwisko,
DataWydania = badanie.dataOd,
DataWażności = badanie.dataDo,
Skan = badanie.skanDokumentu
};
return bindingSource;
}
}




Czy ktoś może wie jak to przerobić??
tagi: LINQ   PDF


Aaapsik  2011-05-03 22:44:15 #1
0
avatar
 
 
Nie bardzo rozumiem, dlaczego nie możesz dodać nowych kolumn w programie (kodzie).
 
Ja miałem podobny problem i rozwiązałem go tak:



[Kod]
// wygeneruj kolumnydataGridViewMain.AutoGenerateColumns = true;// usun kolumnedataGridViewMain.Columns.Remove("NIEPOTRZEBNA_KOLUMNA");
// ukryj kolumnedataGridViewMain.Columns["KOLUMNA_DO_UKRYCIA"].Visible = false;


// nowa kolumna
DataGridViewCheckBoxColumn cbColumn = new DataGridViewCheckBoxColumn();
cbColumn.DataPropertyName = "NOWA";
cbColumn.HeaderText = "Nowa";
cbColumn.TrueValue = 1;
cbColumn.FalseValue = 0;
dataGridViewMain.Columns.Add(cbColumn);




 
i działa :-)--Piotr A.
http://www.3ap.net
Fajny kot: http://aslan.3ap.net  :-)

Piotr A.

koteczek: http://aslan.3ap.net/

siwanski  2011-05-04 10:58:15 #1.1
0
avatar
 
 
Ok, dodałem odpowiednią kolumnę, która mnie interesowała. Wcześniej nie mogłem tego zrobic, gdyz nie dopisałem odpowiedniej dyrektywy using i VS nie widział definiowania róznych innych typów kolumn w DataGridView oddzielnie, a było mi to potrzebne do stworzenia kolumny typu DataGridViewButtonColumn
 
Teraz, jest inny problem a mianowicie, chce uzyskać taki efekt aby po wciśnięci przycisku przy danym rekordzie pokazał się albo mozna by było pobrac plik który znajduje się w bazie w tej samej tabeli w kolumnie, która u mnie nazywa sie skanDokumentu.
 
W tym celu wiem że trzeba oprogramować akcje dataGridView1_CellContentClick(), ale no własnie jak poprzez ciało tej funkcji dobrać się do konkretnego pola w tabeli, które jest typu nvarbinary, i aby mozna było za pośrednictwem takiego przycisku pobrać plik z bazy na dysk twardy? Wie ktoś może, jak to zrobić, bo ja nie mam pomysłu już jak to ugryźć?

siwanski  2011-05-04 23:22:18 #1.1.1
0
avatar
 
 
Udało mi się sklecić coś takiego:



[Kod]
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
int idDanegoBadania = (int)dataGridView1[1, e.RowIndex].Value;
var pasujacySkan =
(
from skan in bazaBudSystem.Badania
where skan.id == idDanegoBadania
select skan.skanDokumentu
).AsEnumerable().First();

var pasujacaNazwaSkanu =
(
from skan in bazaBudSystem.Badania
where skan.id == idDanegoBadania
select skan.nazwaDokumentu
).AsEnumerable().First();

saveFileDialog1.ShowDialog();
saveFileDialog1.FileName = pasujacaNazwaSkanu;
FileStream strumienZapisywaniaDoPliku = new FileStream(saveFileDialog1.FileName, FileMode.Append, FileAccess.Write, FileShare.Write);
strumienZapisywaniaDoPliku.Close();
StreamWriter strumienZapisywanychDanych = new StreamWriter(saveFileDialog1.FileName, true, Encoding.ASCII);
strumienZapisywanychDanych.Write(pasujacySkan);
strumienZapisywanychDanych.Close();
}




aczkolwiek definiujac strumiń do zapisywania do pliku w taki sposób nic więcej nie mogę z nim zrobić, tzn. VS nic nie podpowiada a jedyna logiczna rzecz to zadziałanie metodą SaveFile na strumień tak jak sie to ma w przypadku richTextBox'ów czy też pictureBox'ów np.


[Kod]
richTextBox1.SaveFile(saveFileDialog1.FileName);




Jak widać, mam dostęp do tablicy w której zapisany jest plik, jak i do nazwy z jaką został załadowany, ale w dalszym ciągu nie wiem jak taki plik zapisać na dysk, albo ewentualnie podglądnąć na nowym Form'ie(tyle że wtedy dochodzi problem z obsługą plików pdf na form'ie). Czy ktoś z was może mi pomóc i dac kilka wskazówek jak to zrobić?

Udziel odpowiedzi

avatar
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Idź na górę strony