Добавьте AutoPostBack в RadioButton в Gridview, который вставляется как литерал - PullRequest
2 голосов
/ 21 февраля 2011

У меня есть вид сетки со столбцом RadioButton, который я создаю согласно следующей статье:

http://www.asp.net/data-access/tutorials/adding-a-gridview-column-of-radio-buttons-cs

Код вида сетки:

<asp:GridView ID="gvCounts" runat="server" Width="400px" AutoGenerateColumns="false"
        cssClass="Grid" OnRowCreated="gvCounts_RowCreated">            
        <Columns>
            <asp:TemplateField>
            <ItemTemplate>
                <asp:Literal ID="RadioButtonMarkup" runat="server"></asp:Literal>
            </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="Category" HeaderText="Category" />
            <asp:BoundField DataField="Subcategory" HeaderText="Subcategory" />
            <asp:BoundField DataField="Count" HeaderText="Count" />
            </Columns>
        </asp:GridView>

А внутренний код:

 protected void gvCounts_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Literal output = (Literal)e.Row.FindControl("RadioButtonMarkup");
            output.Text = string.Format(@"<input type='radio' name='CategoryGroup' id='RowSelector{0}' value='{0}' />", e.Row.RowIndex);
        }
    }

Однако - я хочу, чтобы форма отправляла сообщения назад каждый раз при смене переключателя, в отличие от необходимости нажимать кнопку «отправить».

Поскольку переключатели здесь - это не элементы управления .net, а стандартные переключатели HTML, я не уверен, как мне это сделать.

Ответы [ 3 ]

0 голосов
/ 23 февраля 2011

У меня тоже была та же проблема (и я использовал тот же учебник). Если вы используете JQuery, мое решение может работать для вас. В функции rowCreated у меня есть это:

int index = e.Row.RowIndex;
Literal output = (Literal)e.Row.FindControl("RadioButtonMarkip");
output.Text=string.Format("<input type=\"radio\" name=\"Default_Group\" " +   "id=\"RowSelector{0}\" value=\"{0}\" ", e.Row.RowIndex); 

//check radio button if selected before
if (DefaultSeletectedIndex == e.Row.RowIndex || (!Page.IsPostBack && e.Row.RowIndex==0))
{
 output.Text += "checked=\"checked\"";
}

output.Text += "onclick = \"jQuery.fn.post_Default("+index+")\" />";

Тогда на стороне JS:

<script type="text/javascript">
jQuery.fn.post_Default=function(){
$.post("YourPage.aspx", {Default: arguments[0]});
};
</script>

Теперь все, что вам нужно, - это загрузка страницы, чтобы проверить Request.Form ["Default"] для значения индекса вашего проверенного переключателя. Возможно, это не самый элегантный способ сделать это, но пока что это работает. Я также играю с идеей просто использовать для этого функцию $ .ajax jquery. Я думаю, что это может быть немного чище, но пока это работает.

0 голосов
/ 23 февраля 2011

Код сзади:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            gvCounts.DataSource = new SupplierRepository().GetSupplierList();
            gvCounts.DataBind();
        }
        else
        {
            string targetCtrl = Request.Params.Get("__EVENTTARGET");

            **// your method, do exactly what button click did
            ShowDetails();**
        }
    }
    protected void gvCounts_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Literal output = (Literal)e.Row.FindControl("RadioButtonMarkup");
            output.Text = string.Format("<input type='radio' name='CategoryGroup' onclick='__doPostBack(\"RowSelector{0}\",\"\")' id='RowSelector{0}' value='{0}'  />", e.Row.RowIndex);
        }
    }
0 голосов
/ 21 февраля 2011

Переключатель asp.net отображается в браузере следующим образом:

<input id="RadioButton1" type="radio" name="RadioButton1" value="RadioButton1" onclick="javascript:setTimeout('__doPostBack(\'RadioButton1\',\'\')', 0)" />

Все, что вам нужно сделать, - это скопировать его.:)

...