C# İle İlgili 2 Soru
-
Herkese selamlar ; 2 sorum var bunlardan ilki şöyle
Bir datagridview ım var ve bunun içerisinde ki bilgileri excel e export etmek istiyorum ayrıca 2 adet label ım var bu export edilen dataların en altına da bu iki labelda bulunan değerleri eklemek istiyorum. ( Panel içerisine alabilirim nesneleri ) webde gayet basit olmasına rağmen maalesef winform da bunu sağlıklı yapamadım.
2.sorum Messagebox lar ile ilgili MessageBoxIcon u editlemek istiyorum kendi iconumu nasıl yerleştirebilirim ?
herkese iyi çalışmalar dilerim...
-
2. soruna cevap vereyim hocam..
milyon tane overload ı var :)

-
rappermcs bunu yazdı
2. soruna cevap vereyim hocam..
milyon tane overload ı var :)

Abi sanırı9m bunlar hali hazırda ki prop.ları benim messagebox da şöyle bir icon göstermem gerekiyor http://www.veryicon.com/icon/32/System/Sleek%20XP%20Basic/Ok.png
-
http://msdn.microsoft.com/en-gb/magazine/cc188920.aspx şurda bişiler var veya mesajbox yerine kendi classını yaz yeni bir formu showdialogla açarsın ondan veri döndürürsün.
-
Ben de şöyle birşey buldum.
http://stackoverflow.com/questions/6560493/messagebox-show-custom-icon
Telekom kilitlemiş :) işyerimde olduğum için bakamıyorum sanırım bu işini görecektir :)
-
Fikir edinmen açısından VB ile yazdığım dll vardı onun kodlarını paylaşıyorum.
excel_ad => excel dosyasına veriğin isim
excel_kolon => excelde yazdıracağın kolonların ismi
excel_veri_liste => veritabanından çekilen verilerin liste ye atılmış hali
Public Sub excelolustur(ByVal excel_ad As String, ByVal excel_kolon_liste As List(Of String), ByVal excel_veri_liste As List(Of String))
Try
Dim objFileStream As FileStream
Dim objStreamWriter As StreamWriter
Dim dosya_adı As String = excel_ad + ".xls"
Dim dosya_yolu As String = "C:\Users\furkan1\Desktop\" + dosya_adı
objFileStream = New FileStream(dosya_yolu, FileMode.Create, FileAccess.Write)
objStreamWriter = New StreamWriter(objFileStream, System.Text.Encoding.Default)
Dim str As String = ""
For index = 0 To excel_kolon_liste.Count - 1
str += excel_kolon_liste(index) + Chr(9)
Next
objStreamWriter.WriteLine(str)
str = ""
For index = 0 To excel_veri_liste.Count - 1
If index Mod excel_kolon_liste.Count = 0 Then
objStreamWriter.WriteLine(str)
str = ""
End If
str += excel_veri_liste(index) + Chr(9)
Next
objStreamWriter.Close()
objFileStream.Close()
Catch ex As Exception
End Try
End Sub
www.developerfusion.com üzerinden kodları c# a çevirebilirsin.
-
2. soru için en doğru yol Messageboxindirect api ını kullanmak.
http://www.codeproject.com/Articles/8460/Advanced-MessageBoxing-with-the-C-MessageBoxIndire
http://www.tahribat.com/Forum-Google-Aninda-Ceviri-Kucuk-Bir-Programcik-169997/
-
1.sorunda bir çok yolu izleyebilirsin.
Gördüğüm en iyi yol .net 4.0 ile gelen dynamic kontrolleriyle yapmak. Çok kısa ve kolay bir yöntem.Ben aşağıda ki gibi yapıyorum: (silverlight için yapmıştım. Kodu biraz değiştirmen gerekicektir. içeriye notlar yazdım)
public class clsExcel
{#region bu methodu collection itemssource kullanılması zorunlu olan silverlight gibi uygulamalarında gerektiği için silmedim. sen silebilirsin.
public object GetValue(object o, string path)
{
var index = path.LastIndexOf('.');
if (index > 0)
{
var propPath = path.Substring(0, index);
path = path.Substring(index + 1);
o = GetValue(o, propPath);
}
if (o == null)
return null;
var property = o.GetType().GetProperty(path);
var value = property.GetValue(o, null);
return value;
}#endregion
public void excelAktar(DataGrid myDataGrid)
{
var dataGrid = myDataGrid;
var headers = "";
foreach (var column in dataGrid.Columns)
{
headers += "<Cell ss:StyleID=\"OrangeStyle\"><Data ss:Type=\"String\">" + column.Header + "</Data></Cell>";
}
#region burada ve üstte dataTable içinde dönmen gerekir. yani biraz editlemen gerekiyor. alta extra satır atacaksan da aşağıda ki kodda yapabilirsin.
var data = "";
foreach (var row in dataGrid.ItemsSource)
{
data += "<Row>\n";
foreach (var column in dataGrid.Columns)
{
var binding = (column as DataGridBoundColumn).Binding;
var path = binding.Path.Path;
var value = GetValue(row, path);
data += "<Cell><Data ss:Type=\"String\">" + value + "</Data></Cell>\n";
}
data += "</Row>\n";
}
#endregion
string excelXML = xmlTemplate.Replace("[headers]", headers).Replace("[data]", data);
byte[] contents = Encoding.UTF8.GetBytes(excelXML);
var dialog = new SaveFileDialog();
dialog.DefaultExt = ".xml";
dialog.Filter = "Excel (*.xls)|*.xls";
if (dialog.ShowDialog() == true)
{
using (Stream s = dialog.OpenFile())
{
s.Write(contents, 0, contents.Length);
}
}
}
public string xmlTemplate = @"
<?xml version=""1.0""?>
<?mso-application progid=""Excel.Sheet""?>
<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet""
xmlns:o=""urn:schemas-microsoft-com:office:office""
xmlns:x=""urn:schemas-microsoft-com:office:excel""
xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet""
xmlns:html=""http://www.w3.org/TR/REC-html40"">
<DocumentProperties xmlns=""urn:schemas-microsoft-com:office:office"">
<Version>12.00</Version>
</DocumentProperties>
<ExcelWorkbook xmlns=""urn:schemas-microsoft-com:office:excel"">
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID=""OrangeStyle"">
<Interior ss:Color=""#FFC000"" ss:Pattern=""Solid""/>
</Style>
</Styles>
<Worksheet ss:Name=""Export"">
<Table x:FullColumns=""1""
x:FullRows=""1"" ss:DefaultRowHeight=""15"">
<Row>[headers]</Row>
[data]
</Table>
<WorksheetOptions xmlns=""urn:schemas-microsoft-com:office:excel"">
<PageSetup>
<Header x:Margin=""0.3""/>
<Footer x:Margin=""0.3""/>
<PageMargins x:Bottom=""0.75"" x:Left=""0.7"" x:Right=""0.7"" x:Top=""0.75""/>
</PageSetup>
<Print>
<ValidPrinterInfo/>
<PaperSizeIndex>9</PaperSizeIndex>
<HorizontalResolution>600</HorizontalResolution>
<VerticalResolution>0</VerticalResolution>
</Print>
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>4</ActiveRow>
<ActiveCol>3</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
";
} -
Win form için bu arada arkadaşlar ilk postda yazmayı unutmuşum
-
LuCiFeR bunu yazdı
Win form için bu arada arkadaşlar ilk postda yazmayı unutmuşum
yazdığım kodda ki notları uygularsan winform için de kullanabilirsin hocam. ilk methodu silmen ve ikinci region içinde ki yeri dataTable yapman yeterli olacaktır.
