デフォルトですべての行が編集可能なグリッドビューがあります。ほとんどの列には、問題ではないフォーマットバリデーターを備えた単純なテキストボックスが必要です。
ただし、ユーザーが選択できる選択肢のリストを必要とする列が 1 つあります。これを行うには、Ajax ドロップ ダウン エクステンダーを使用してテキスト ボックスにバインドしているので、テキスト ボックスをクリックするとリストが表示されます...十分に単純です。
ユーザーがドロップダウンからオプションを選択した後に問題が発生します。テキストボックスの値を新しく選択したものに更新できないようです。
これは gridview 列の ItemTemplate です。
<%-- PRIORITY --%>
<asp:TemplateField HeaderText="PRI" SortExpression="PRIORITY">
<ItemTemplate>
<ItemStyle CssClass="ssCellSelected" />
<asp:Panel ID="priorityitems" runat="server" BorderColor="Aqua" BackColor="White" BorderWidth="1">
<asp:ListBox ID="lstPRIORITY" runat="server" SelectedItem='<%# Bind("PRIORITY") %>'>
<asp:ListItem>P1</asp:ListItem>
<asp:ListItem>P2</asp:ListItem>
<asp:ListItem>P3</asp:ListItem>
</asp:ListBox>
</asp:Panel>
<asp:TextBox ID="PRIORITY" runat="server" Width="35px" Text='<%# Eval("PRIORITY") %>' CssClass="ssTextBox"></asp:TextBox>
<cc1:DropDownExtender ID="PRIORITY_DropDownExtender" runat="server"
Enabled="True" DropDownControlID="priorityitems" TargetControlID="PRIORITY">
</cc1:DropDownExtender>
</ItemTemplate>
<ItemStyle CssClass="ssCell" />
</asp:TemplateField>
各行の onclick イベント作成のコード ビハインドを次に示します。
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then Dim lstPRI As ListBox = DirectCast(e.Row.Cells(3).FindControl("lstPRIORITY"), ListBox) Dim rowIndex As Integer = e.Row.RowIndex Dim columIndex As Integer = 3 '列インデックスは 0 If lstPRI IsNot Nothing Then lstPRI.Attributes.Add("onclick", "setText(this.options[this.selectedIndex].value," & rowIndex.ToString & "," & columIndex.ToString & ");") 終了する場合 終了する場合
End Sub
[this.selectedIndex].Value を取得し、それを ID が PRIORITY の TextBox に適用する必要があります。
どういうわけかこれを動的な対応物に変える必要があります
<script type="text/javascript" language="javascript">
function setText(newValue, row, column) {
document.getElementById("ctl00_pagebody_GridView1_ctl02_PRIORITY").value = newValue;
}
</script>