首先是
byte[] buffer = new byte[LENGTH];
MemoryStream memoryStream = new MemoryStream(buffer);
在您的例子,你可以使用
DXGridControl_Table.SaveLayoutToStream(_userLayout);
byte[] doSomethingwithyourData = _userLayout.GetBuffer();
var length = _userLayout.Length;
有了這些信息,你可以寫二進制數據什麼的。
注意,緩衝區包含分配的字節,這可能是未使用的。 例如,如果將字符串「test」寫入到MemoryStream 對象中,則從GetBuffer返回的緩衝區的長度爲256,而不是 4,未使用252個字節。要僅獲取緩衝區中的數據,請使用ToArray方法 ;但是,ToArray會在內存中創建數據的副本。
或者
Binary binary = new Binary(_userLayout.ToArray());
像對方回答說,有二進制的隱式轉換:
public static implicit operator Binary(byte[] value) {
return new Binary(value);
}
您請求的例子。 ,使用方法的一個小例子:
namespace Stackoverflow.Hannish.SaveLayout
{
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Windows.Forms;
public partial class Form1 : Form
{
/// <summary>
/// Here we store the layout data as a string. This is the data, that
/// gets saved to disk/database/etc.
/// </summary>
private string layoutdata = string.Empty;
public Form1()
{
this.InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// Just some FooBar data.
var data = new List<DataValue>
{
new DataValue { Id = 1, Name = "Xyz", IsCool = true },
new DataValue { Id = 2, Name = "Abc", IsCool = false }
};
this.gridControl1.DataSource = data;
}
private void bnLoadLayout_Click(object sender, EventArgs e)
{
using (var stream = new MemoryStream())
{
var strdata = Encoding.Default.GetBytes(this.layoutdata);
stream.Write(strdata, 0, strdata.Length);
stream.Seek(0, SeekOrigin.Begin);
this.gridView1.RestoreLayoutFromStream(stream);
}
}
private void bnSaveLayout_Click(object sender, EventArgs e)
{
using (var stream = new MemoryStream())
{
this.gridView1.SaveLayoutToStream(stream);
this.layoutdata = Encoding.Default.GetString(stream.ToArray());
}
}
}
}
而一些字節到文件魔術:
private void bnLoadBinLayout_Click(object sender, EventArgs e)
{
using (FileStream fstream = File.Open("Layoutdata.bin", FileMode.Open))
{
int length = (int)fstream.Length;
byte[] buffer = new byte[length];
fstream.Read(buffer, 0, length);
var memstream = new MemoryStream(buffer);
this.gridView1.RestoreLayoutFromStream(memstream);
}
}
private void bnSaveBinLayout_Click(object sender, EventArgs e)
{
using (FileStream fstream = File.Create("Layoutdata.bin"))
{
var memstream = new MemoryStream();
this.gridView1.SaveLayoutToStream(memstream);
fstream.Write(memstream.GetBuffer(), 0, (int)memstream.Length);
}
}
...只是作爲例子。 DevExpress GridView可以使用SaveLayoutToXml()保存佈局本身;
Jedzia,關愛給您的評論的一個例子」有了這些信息,你可以寫二進制數據。什麼?」。適用於這種情況下你可以看到,我不太習慣用流和二進制類型的工作,所以請容許我 – Hannish
我補充說:‘關於使用一個小例子:’在上面的回答,真希望幫助:) – Jedzia
鑑於偉大而徹底的例子,我認爲這是最好的答案,非常感謝你! – Hannish