Есть ли какая-то конкретная причина, по которой вы хотели бы использовать ваши кнопки в шаблоне элемента. Вы можете в качестве альтернативы сделать это следующим образом, там, предоставив вам полную мощность редактирования строки сетки. Вам также предоставляется бонус проводки функции отмены и удаления.
Пометить
<asp:TemplateField HeaderText="Edit">
<ItemTemplate>
<asp:ImageButton ID="EditImageButton" runat="server" CommandName="Edit"
ImageUrl="~/images/Edit.png" Style="height: 16px" ToolTip="Edit"
CausesValidation="False" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="btnUpdate" runat="server" CommandName="Update"
Text="Update" Visible="true" ImageUrl="~/images/saveHS.png"
/>
<asp:LinkButton ID="btnCancel" runat="server" CommandName="Cancel"
ImageUrl="~/images/Edit_UndoHS.png" />
<asp:LinkButton ID="btnDelete" runat="server" CommandName="Delete"
ImageUrl="~/images/delete.png" />
</EditItemTemplate>
<ControlStyle BackColor="Transparent" BorderStyle="None" />
<FooterStyle HorizontalAlign="Center" />
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
Код за
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
GridView1.DataBind();
TextBox txtledName = (TextBox) GridView1.Rows[e.NewEditIndex].FindControl("txtAccountName");
//then do something with the retrieved textbox's text.
}
, однако кодирование не может работать в потоке, только байт [].
blockquote>Правильно, но
StreamReader : TextReader
может быть связано с потоком.Так что просто создайте этот MemoryStream, вставьте байты на одном конце и используйте ReadLine () на другом. Я должен сказать, что никогда не пробовал этого.
Класс Encoding
не может иметь дело с этим напрямую, но Decoder
, возвращенный из Encoding.GetDecoder()
, может (действительно, это вся его причина существования). StreamReader
использует Decoder
внутри.
Работать с ним немного неудобно, поскольку необходимо заполнить char[]
, а не возвращать string
(Encoding.GetString()
и StreamReader
обычно обрабатывают бизнес заполнения char[]
). [1116 ]
Проблема с использованием MemoryStream
заключается в том, что вы копируете все байты из одного массива в другой, без усиления. Если все ваши буферы имеют одинаковую длину, вы можете сделать это:
var decoder = Encoding.UTF8.GetDecoder();
// +1 in case it includes a work-in-progress char from the previous buffer
char[] chars = decoder.GetMaxCharCount(bufferSize) + 1;
foreach (var byteSegment in bytes)
{
int numChars = decoder.GetChars(byteSegment, 0, byteSegment.Length, chars, 0);
Debug.WriteLine(new string(chars, 0, numChars));
}
Если буферы имеют разную длину:
var decoder = Encoding.UTF8.GetDecoder();
char[] chars = Array.Empty<char>();
foreach (var byteSegment in bytes)
{
// +1 in case it includes a work-in-progress char from the previous buffer
int charsMinSize = decoder.GetMaxCharCount(bufferSize) + 1;
if (chars.Length < charsMinSize)
chars = new char[charsMinSize];
int numChars = decoder.GetChars(byteSegment, 0, byteSegment.Length, chars, 0);
Debug.WriteLine(new string(chars, 0, numChars));
}