Может ли API кодирования декодировать поток / непрерывные байты?

Есть ли какая-то конкретная причина, по которой вы хотели бы использовать ваши кнопки в шаблоне элемента. Вы можете в качестве альтернативы сделать это следующим образом, там, предоставив вам полную мощность редактирования строки сетки. Вам также предоставляется бонус проводки функции отмены и удаления.

Пометить

<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.

}
0
задан Luke Vo 5 March 2019 в 09:01
поделиться

2 ответа

, однако кодирование не может работать в потоке, только байт [].

Правильно, но StreamReader : TextReader может быть связано с потоком.

Так что просто создайте этот MemoryStream, вставьте байты на одном конце и используйте ReadLine () на другом. Я должен сказать, что никогда не пробовал этого.

0
ответ дан Henk Holterman 5 March 2019 в 09:01
поделиться

Класс 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));
}
0
ответ дан canton7 5 March 2019 в 09:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: