ASP.NET может CommandArgument Eval взять в 2 столбца? - PullRequest
4 голосов
/ 18 ноября 2011

У меня есть CommandArgument, который принимает 1 аргумент из LinkButton в моем GridVie для удаления строки в GridView.

Код в моем aspx.cs:

LinkButton lnk = (LinkButton)sender;
        string stid = lnk.CommandArgument.ToString();
        SqlConnection conn = new SqlConnection("<Connection>");
        string sql = string.Format("DELETE FROM [ConflictingRole] where Role like '%{0}%'",stid);
        SqlCommand cmd = new SqlCommand(sql, conn);
        conn.Open();
        cmd.ExecuteNonQuery();

Код в моем .aspx:

<asp:GridView ID="GridView1" ondatabound="gv_DataBound" runat="server" DataSourceID="SqlDataSource1">
    <Columns>
        <asp:TemplateField>
           <ItemTemplate>

             <asp:CheckBox ID="UserSelection" OnCheckedChanged="CRUserSelector_CheckedChanged" ondatabound="gv_DataBound" runat="server" />
             <asp:LinkButton ID="lnkDelete" runat="server" onclick="lnkDelete_Click" Text="Delete" CommandArgument='<%# Eval("Role") %>' PostBackUrl="~/CRList.aspx" ></asp:LinkButton>

           </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Мой текущий CommandArgument принимает только одно имя столбца, а именно Role Однако я хотел бы взять 2 имени столбца и использовать 2 имени столбца в моем выражении String sql в aspx.cs.

Причина: у меня есть несколько строк с одинаковым значением «Строка», поэтому, если я удаляю на основе значения столбца «Роль», я удаляю несколько строк. Я хотел бы принять значения из «Role» и «ConflictingRole» для запроса удаления sql.

Могу ли я узнать, возможно ли это сделать?

Спасибо.

Ответы [ 3 ]

11 голосов
/ 18 ноября 2011

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

CommandArgument='<%# Eval("Role") + "," + Eval("ConflictingRole") %>'

разделить значение commandArgument в обработчике,

string []ar=lnk.CommandArgument.ToString().Split(',');

РЕДАКТИРОВАТЬ:

Вы можете написать запрос на удаление, например:

string sql="DELETE FROM [ConflictingRoles] where Role like @role AND ConflictingRole like @crole";

ИЛИ

string sql="DELETE FROM [ConflictingRoles] where Role=@role AND ConflictingRole=@crole";

Или оператор SQL с жестким кодом (что не рекомендуется)

string sql=string.Format("DELETE FROM [ConflictingRoles] where Role like '%{0}%' AND 
          ConflictingRole like '%{1}%'",ar[0],ar[1]);
1 голос
/ 18 ноября 2011

В вашей кнопке ссылки вы можете изменить аргумент команды на это.

CommandArgument='<%# Eval("Role")+"::"+Eval("ConflictingRole") %>' 

Тогда в вашем коде вы можете получить доступ к обоим, выполнив следующие действия.

string[] both = lnk.CommandArgument.ToString().Split(new string[]{"::"},StringSplitOptions.None);

string first = both[0];
string second = both[1];

Не очень элегантно.... но я думаю, это решит твою нужду.

0 голосов
/ 27 марта 2013

Попробуйте код ниже.

string[] both = lnk.CommandArgument.ToString().Split(new string[]{"::"},StringSplitOptions.None);

string first = both[0];
string second = both[1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...