Ваша DataGrid привязывает RadioButton к свойствам Test1 , поэтому, если вы установите их соответствующим образом, он не будет сохранять выбранный выбор.
Я не парень ASP .NET, и я надеюсь, что кто-то умнее меня поможет вам, но никто не отвечает. Я сделаю это. Ваши радиокнопки привязаны к вашему свойству Test1.IsRegister , что означает, что для сохранения их состояния необходимо установить для этого свойства значение true или false. Сначала измените ваш класс Test1, чтобы он содержал bool вместо строк. На данный момент я установил для CanRegister всегда true, вы можете изменить логику позже.
public class Test1
{
public string Name { get; set; }
public bool IsRegister { get; set; }
public bool IsTransfert { get; set; }
public bool IsSelfManaged { get; set; }
public bool CanRegister { get { return true; } }
public bool CanTransfert { get { return true; } }
public bool CanSelfManage { get { return true; } }
}
Теперь вам нужно сохранять каждый раз, когда кто-то нажимает на RadioButton , вам нужно создать обработчик событий и установить для AutoPostBack значение true.
<asp:RadioButton OnCheckedChanged="register_checked" AutoPostBack="true" ID="register" runat="server" GroupName="domaine_action" Checked='<%# Bind("IsRegister")%>' Enabled='<%# Bind("CanRegister")%>' />
Теперь обработчик событий register_checked . В этой части вы берете значение свойства RadioButton.Checked и задаете его для элемента в вашем списке .
protected void register_checked(object sender, EventArgs e)
{
//make sure you have a list
if(Session["dic"] == null)
return;
List<Test1> _dic = (List<Test1>)Session["dic"];
RadioButton btn = sender as RadioButton;
string btnClientId = btn.ClientID;
//make sure cast didnt crash
if (btn == null)
return;
foreach (DataGridItem control in dg1.Items)
{
//find the register RadioButton, ID="register"
var item = control.FindControl("register");
//make sure its the right RadioButton
if (item.ClientID.Equals(btnClientId))
{
//get the item index of this DataGridItem and take the appropriate object for List<Test1>
Test1 realItem = _dic[control.ItemIndex] as Test1;
if (realItem == null)
continue;
//set the Items IsRegister to the button value.
realItem.IsRegister = btn.Checked;
}
}
}
Причина, по которой вы должны сделать все это, заключается в том, что ваши RadioButton являются частью ItemTemplate и связаны с DataGrid , что означает, что потенциально будет много DataGridItem с и, следовательно, множество RadioButton с таким же идентификатором "регистр". Вот почему вы не можете получить к нему из-за кода.
Это сохранит состояние RadioButton s. Надеюсь, это поможет вам.