Como adicionar programaticamente um botão a um gridview e atribuí-lo a uma função code-behind específica?

Em tempo de execução, estou criando uma DataTable e usando loops for aninhados para preencher a tabela. Posteriormente, esta tabela atribuo como DataSource a um gridview e em RowDataBound atribuo o valor de cada célula. Quero saber como posso atribuir um botão a cada célula e atribuí-lo a uma função codebehind. Vou ter 12 botões e cada um conterá um valor diferente. Eu preferiria que todos eles chamassem a mesma função com algum tipo de evento que armazena o valor específico da célula.

Este é o código em que a tabela é criada:

protected void GridViewDice_RowDataBound(object sender, GridViewRowEventArgs e)
{


    DataTable diceTable = _gm.GetDice(_gameId);
    for (int i = 0; i < GameRules.ColumnsOfDice; i++)
    {
        if(e.Row.RowIndex > -1)
        {
            /*This is where I'd like to add the button*/
            //e.Row.Cells[i].Controls.Add(new Button);
            //e.Row.Cells[i].Controls[0].Text = specific value from below

            //This is where the specific value gets input
            e.Row.Cells[i].Text = diceTable.Rows[e.Row.RowIndex][i].ToString();
        }

    }
}

Eu gostaria de lidar com o clique do botão com algo como isto:

protected void DiceButton_Click(int column, int row, int value)
{
    //Do whatever
}

Alguma sugestão?

questionAnswers(3)

yourAnswerToTheQuestion